¿Cómo configuro el shell que se utiliza cuando un usuario SSH en un servidor? Por ejemplo, no soporto BASH y necesito usar ZSH, ¿cómo lo hago para que ZSH se cargue junto con mi perfil ( .zsh_profile
) cuando ssh a la máquina.
No quiero tener que pasar un montón de parámetros con ssh tampoco, ¿no puedo configurar el shell predeterminado?
/etc/shells
para que el shell sea seleccionable.passwd
paquete .man chsh
cambia de caparazón, no siempre funcionaAlternativamente, puede pegar
exec /bin/zsh
en su script de inicio de sesión bash. Esto reemplazará la instancia bash con su shell.O puedes hacer
ssh host "zsh -l"
fuente
L
ssh -t
se requiere para obtener un TTY para las últimas opciones. Por defecto, si se proporciona un comando (comozsh -l
), OpenSSH haría un shell sin inicio de sesión, que no le asignaría TTY, y-l
no lo cambiará (porque se ejecuta después de iniciar sesión).Edite / etc / passwd (si tiene los derechos o solicite al administrador del sistema) que cambie su shell predeterminado.
fuente
Si no puede cambiar su shell predeterminado,
ssh -t user@host 'zsh -l'
funciona.La
-t
bandera fuerza una asignación pseudo-tty, y la-l
bandera genera un shell de inicio de sesión .fuente
No estoy seguro de cómo puede poner su
.zshrc
servidor local a remoto (sin almacenarlo permanentemente allí), esto funciona para mí para cambiar mi shell de inicio de sesión en el servidor remoto.Como es una cuenta compartida,
zsh
solo puedo usarla para mí con este método.Agregue esto a su
~/.ssh/config
archivo en su máquina local.Podría haber una forma hack de lograr lo que está buscando, como a continuación.
ADVERTENCIA Esto viene sin garantías y no parece 'sabio', sin embargo logré poner mi archivo local en el servidor y usarlo en el shell de inicio de sesión.
¿Cómo funciona?
RemoteCommand
define lo que debe ejecutarse en el lado remoto.LocalCommand
define lo que debe ejecutarse en local, que se utiliza para copiar su archivo local en un servidor remoto para obtenerlo. Aquí está el truco, ocurre solo después de una conexión 'exitosa' al host remoto.Sentido:
sleep
sftp
para poner su archivo en un servidor remoto, el servidor remoto se activasleep
y obtiene sus scripts.Es súper hack, me gustaría saber si hay una mejor manera también.
Actualización: Esto se puede usar en lugar del tiempo de sueño "largo":
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'
fuente