¿Cómo configuro el shell que se utiliza cuando un usuario realiza SSH a un servidor? Por ejemplo, no soporto BASH y necesito usar ZSH, ¿cómo hago para que ZSH se cargue junto con mi perfil ( .zsh_profile
) cuando hago ssh a la máquina?
Tampoco quiero tener que pasar un montón de parámetros con ssh, ¿no puedo configurar el shell predeterminado?
Respuesta1
Si no puedes cambiar tu shell predeterminado, ssh -t user@host 'zsh -l'
funciona.
La -t
bandera fuerza una asignación pseudo-tty y -l
genera unashell de inicio de sesión.
Respuesta2
Suponiendo que esté ejecutando Linux, puede usar el chsh
comando.
chsh -s /bin/ksh foo
chsh -s /bin/bash username
Respuesta3
man chsh
cambia el shell, no siempre funciona
Alternativamente, puede ingresar exec /bin/zsh
su secuencia de comandos de inicio de sesión de bash. Esto reemplazará la instancia de bash con su shell.
O puedes hacerssh host "zsh -l"
Respuesta4
No estoy seguro de cómo puede poner su .zshrc
servidor local en remoto (eso sin almacenarlo permanentemente allí), esto me funciona para cambiar mi shell de inicio de sesión en el servidor remoto.
Como es una cuenta compartida, solo puedo usarla zsh
para mí con este método.
Agregue esto a su ~/.ssh/config
archivo en su máquina local.
Host yourServer
HostName <IP, FQDN or DNS resolvable name>
IdentityFile ~/.ssh/<your keyfile>
RemoteCommand zsh -l
RequestTTY force
User <yourUsername>
Podría haber una forma pirateada de lograr lo que está buscando, como se muestra a continuación.
ADVERTENCIA Esto no tiene garantías y no parece "inteligente", sin embargo, logré colocar mi archivo local en el servidor y obtenerlo en el shell de inicio de sesión usando esto.
Host someHost
HostName someIP
IdentityFile ~/.ssh/somekey.pem
RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
PermitLocalCommand yes
LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
RequestTTY force
User someUser
¿Cómo funciona?
RemoteCommand
define lo que se debe ejecutar en el lado remoto.LocalCommand
define lo que se debe ejecutar en local, que se utiliza para copiar su archivo local al servidor remoto para obtenerlo. Aquí está el problema: ocurre sólo después de una conexión "exitosa" al host remoto.
Significado:
- Tu conexión al control remoto debe estar abierta y viva
- Su shell remoto aún no tiene el archivo, por lo que tiene que esperar hasta que el archivo esté allí, ergo
sleep
- Su local utiliza
sftp
para colocar su archivo en el servidor remoto, el servidor remoto se activasleep
y obtiene sus scripts.
Es súper hack, también me gustaría saber si hay una manera mejor.
Actualización: esto se puede usar en lugar de un tiempo de sueño "prolongado":
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'