ssh_config: especifique el comando que se ejecutará en la máquina remota al iniciar sesión

16

Esta es una expansión de mi pregunta anterior . Necesito ejecutar un comando almacenado localmente (es decir mount /home) en una máquina remota al iniciar sesión ssh. Por el momento, estoy usando:

ssh -t mymachine.example.com 'mount /home ; /bin/bash'

lo que funciona bien, pero me preguntaba si podría poner este comando en mi .ssh/configpara no tener que escribirlo todo el tiempo. Encontré una LocalCommandopción, pero no veo ninguna RemoteCommandopción.

Es importante que command-to-be-executedse almacene en la máquina local, ya que contendrá una contraseña para abrir un disco encriptado. Esa es la razón por la que no puedo poner el comando en .profilela máquina remota.

Martin Vegter
fuente

Respuestas:

6

Esta pregunta se ha hecho antes en SuperUser. La primera respuesta utiliza un archivo remoto que no se ajusta a sus requisitos, pero la segunda respuesta que sugiere utilizar un alias local podría ser la solución a su problema.

Es importante que el comando a ejecutar se almacene en la máquina local, ya que contendrá una contraseña para abrir un disco encriptado. Esa es la razón por la que no puedo poner el comando en .profile en la máquina remota.

Esto probablemente no es seguro. Si uso un echocomando como comando ssh, aparece en psel servidor remoto:

martin@martin ~ % ssh dev2 "echo hello; ps aux|grep echo"

hello
root     25358  0.0  0.0   5848  1296 ?        Ss   11:27   0:00 bash -c echo hello; ps aux|grep echo
root     25362  0.0  0.0   5012   828 ?        S    11:27   0:00 grep echo
Martin von Wittich
fuente
gracias, pero en la solución en SuperUser ~/.ssh/rcse almacena nuevamente en la máquina remota. En cuanto a su comentario sobre psmostrar mis parámetros de línea de comandos (incluida la contraseña), eso no me molesta. Es la máquina remota en la que no confío. Mi máquina local solo la uso yo mismo, por lo que nadie más tiene acceso ps.
Martin Vegter
66
Esa pssalida es de la máquina remota. El punto es: todo lo que suministre sshcomo comando remoto se mostrará en el servidor remoto en ps.
Martin von Wittich
1
Sí, tiene usted razón. Gracias por señalar esto.
Martin Vegter
1
@MartinvonWittich: cada sitio de SE es independiente, por lo que es completamente aceptable que cada sitio tenga Q y A similares, siempre que estén en el tema de ese sitio en particular. Se recomienda copiar contenido si aparece una Q y la A está en otro sitio de SE. Personalízalo según corresponda para que esté en el tema.
slm
7

Esto se agregó en OpenSSH 7.6:

agregue la opción RemoteCommand para especificar un comando en el archivo de configuración ssh en lugar de proporcionarlo en la línea de comandos del cliente. Esto permite que el archivo de configuración especifique el comando que se ejecutará en el host remoto.

ref: https://www.openssh.com/txt/release-7.6

Camden Narzt
fuente
6
RequestTTY yes
RemoteCommand screen -UDr
JRG
fuente
¡¡genial!! ¡¡Gracias!!
Shrish
2

Puede hacerlo con la cooperación de la máquina remota de la siguiente manera.

En su máquina local, inserte el comando para ejecutar en la variable de entorno LC_SSH_INITIAL_COMMAND. SSH generalmente está configurado para pasar todas las variables de entorno del formulario LC_*, porque normalmente son configuraciones regionales.

En la máquina remota, ejecute a eval "$LC_SSH_INITIAL_COMMAND" través de la configuración por tecla en~/.ssh/authorized_keys o desde ~/.ssh/rc(tenga en cuenta que si tiene un ~/.ssh/rcarchivo, debe ocuparse de ejecutarlo xauthmanualmente para el reenvío X11).

Con el authorized_keysmétodo, puede ejecutar un comando de manera similar cuando se cierra la sesión SSH (a menos que el proceso de shell se interrumpa abruptamente; al menos debe atrapar la señal HUP para que su comando se ejecute incluso si la conexión se corta).

Sin embargo, este no es un buen arreglo para hacer algo global como montar un sistema de archivos. Deberá tener cuidado de no volver a montar si el sistema de archivos ya está montado (por ejemplo, debido a un comando SSH que se ejecuta simultáneamente), y no desmontar al cerrar sesión. Mi recomendación para este caso de uso es todavía hacer el montaje comandos remotos de forma explícita, a continuación, ejecutar sin hacer nada especial, y desmontar cuando ya no desea que el acceso de sistema de archivos.

Gilles 'SO- deja de ser malvado'
fuente
0

No lo he intentado, pero un enfoque podría ser

  • Declare un Subsystemen el control remoto sshd_configque ejecute el comando que desea leyendo algunos env
  • Use SendEnven el local .ssh/configpara pasar tales claves al servidor remoto
deshacer
fuente