Estoy en una situación en la que varios usuarios comparten la misma cuenta de usuario en una máquina remota. Tengo un directorio "personal" donde escribí mi propio .zshrc
archivo, y me gustaría tener una manera de:
- Iniciar una sesión ssh en la máquina remota con directivas de mi archivo de configuración ssh (por ejemplo
ControlMaster auto
) - Esta sesión ejecuta un shell Z
- Se ejecuta
.zshrc
en mi directorio "personal" (no en el directorio de inicio del usuario compartido)
Sería bueno tener un alias o una forma simple de iniciar tales sesiones ssh (por eso pensé en usar el archivo de configuración de OpenSSH), ¡pero estoy abierto a cualquier otra idea!
¿Usando el archivo de configuración de OpenSSH?
Leí en la página de manual ssh_config de OpenSSH que puedo usar la directiva LocalCommand
para especificar un comando que se ejecute localmente después de conectarse con éxito al servidor. Esto me hizo pensar que puede haber una manera de decirle al config
archivo qué comando ejecutar de forma remota después de conectarse al servidor, pero no parece haber ninguno.
ssh mycommand
? Y si desea ejecutar algún comando de configuración antes de cada comando que viene sobre ssh, ¿por qué no configurar el lado del servidor?.zshrc
directorio específico (es decir, un directorio personal "personal"). Lo intentéssh -t host_name 'zsh & source /path/to/my_zshrc'
pero no funcionó (lo conseguíFPATH variable not defined
, y creo que es porquezsh
termina antes de que se ejecutemy_zshrc
, y mucho menos esto no me dio un Z shell)Respuestas:
La forma más obvia de ejecutar un comando de forma remota es especificarlo en la línea de comando ssh. El comando ssh siempre es interpretado por el shell del usuario remoto.
Las cuentas compartidas son generalmente una mala idea; si es posible, obtenga cuentas separadas para cada usuario. Si está atascado con una cuenta compartida, puede crear un alias:
Si usa la autenticación de clave pública (nuevamente, recomendado), puede definir comandos por clave en
~/.ssh/authorized_keys
. Vea esta respuesta para más explicaciones. Edite la línea para su clave en~/.ssh/authorized_keys
el servidor (todo en una línea):fuente
exec
comando. ¿Cómo esexec zsh
diferente de llamarzsh
directamente? ¿Por qué es importante en este caso particular?ssh -t [email protected] 'HOME=~/bob; exec zsh'
me saleHOME=~/bob: command not found
. Creo que estoy entcsh
. Tengo el mismo problema si lo intentoHOME=/home/bob
. Probé con bash y zsh. ¿Alguna pista de lo que puede estar causando esto? Finalmente, ¿la sintaxis anterior me dejaría con la sesión ssh abierta? (lo que quiero). Gracias de nuevo.exec
reemplaza el shell original con zsh; sinzsh
, el shell original permanecería en la memoria hasta que zsh salga y luego salga. La principal diferencia es ahorrar un poco de memoria, no es muy importante. Si su shell de inicio de sesión es (t) csh, usesetenv HOME ~/bob; exec zsh
. Finalmente, dado que zsh se inicia sin argumento, obtienes una sesión de shell, como la que obtendrías si solo ejecutarasssh
y tuvieras zsh como shell de inicio de sesión.exec zsh
comando?ZDOTDIR
para que zsh busque archivos de puntos en un directorio diferente. Si usted tiene algún control sobre los archivos punto a continuación, puede hacer algo como complementoeval $LC_STARTUP_CODE
a$ZDOTDIR/.zshrc
y pasar el código a ejecutar en la variable de entornoLC_STARTUP_CODE
.Para ejecutar un comando de forma remota después de conectar el servidor, agregue en su archivo .ssh / config el siguiente fragmento
fuente
LocalCommand
directiva es ejecutar un comando en el shell local , no en el shell remoto .