Si su shell de inicio de sesión no se puede ejecutar en alguna máquina, entonces no puede iniciar sesión a través de SSH, o por la mayoría de los otros métodos. El servidor SSH siempre ejecuta su shell de inicio de sesión. Si pasa un comando en la sshlínea de comando, el shell de inicio de sesión se ejecuta con -cy la cadena de comando¹ como argumentos; de lo contrario, el shell de inicio de sesión se ejecuta como un shell de inicio de sesión sin argumento.
Si hubiera una manera de evitar el shell de inicio de sesión, sería un agujero de seguridad. Una cuenta puede configurarse como una cuenta restringida al hacer que su shell de inicio de sesión sea un programa que solo realiza una tarea específica; por ejemplo, el shell de inicio de sesión podría ser git-shellpermitir solo el acceso a un repositorio git, o rssh, etc.
Para iniciar sesión en esa máquina, deberá hacer arreglos para /bin/zshestar presente o cambiar su shell de inicio de sesión a algo que esté presente.
Lo que recomiendo en un entorno heterogéneo como este es mantenerlo /bin/shcomo su shell de inicio de sesión, porque está presente en todas partes. Establezca la SHELLvariable de entorno en /bin/zshsi está presente, de esa manera obtendrá zsh como un shell interactivo.
if [ -x /bin/zsh ]; then
export SHELL=/bin/zsh
fi
Mientras lo hace, esto le permite evitar codificar el camino zsh.
if SHELL=$(command -v zsh); then
export SHELL
else
unset SHELL
fi
Para que zsh se ejecute automáticamente para un inicio de sesión en modo de texto, invoque desde su .profile. Si desea usarlo .zprofilepara configurar las cosas, conviértalo en un shell de inicio de sesión (pero no obtendrá el mismo entorno en máquinas donde zsh no está presente, por lo que no lo recomiendo). Haga esto solo si se trata de un inicio de sesión interactivo, no cuando .profilese ejecuta mediante un script, durante el inicio de sesión en modo GUI, etc.
if case $- in *i*) true;; *) false;; esac && # interactive shell
[ -z "$ZSH_VERSION" ] && # not running zsh yet
type zsh >/dev/null 2>/dev/null; then # zsh is present
exec zsh
fi
¹ El cliente SSH concatena sus argumentos que no sean opciones con espacios en el medio, y envía la cadena resultante a través de la conexión. Los protocolos SSH definen el comando como una cadena, no una lista de cadenas.
/bin/shy luego, tener a su~/.profileejecutivo remoto el shell apropiado si está disponible?