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/config
para no tener que escribirlo todo el tiempo. Encontré una LocalCommand
opción, pero no veo ninguna RemoteCommand
opción.
Es importante que command-to-be-executed
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
la máquina remota.
~/.ssh/rc
se almacena nuevamente en la máquina remota. En cuanto a su comentario sobreps
mostrar 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 accesops
.ps
salida es de la máquina remota. El punto es: todo lo que suministressh
como comando remoto se mostrará en el servidor remoto enps
.Esto se agregó en OpenSSH 7.6:
ref: https://www.openssh.com/txt/release-7.6
fuente
fuente
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 formularioLC_*
, 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/rc
archivo, debe ocuparse de ejecutarloxauth
manualmente para el reenvío X11).Con el
authorized_keys
mé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.
fuente
No lo he intentado, pero un enfoque podría ser
Subsystem
en el control remotosshd_config
que ejecute el comando que desea leyendo algunos envSendEnv
en el local.ssh/config
para pasar tales claves al servidor remotofuente