Se la shell di accesso non può essere eseguita su un computer, non è possibile accedere tramite SSH o con la maggior parte degli altri metodi. Il server SSH esegue sempre la shell di accesso. Se si passa un comando dalla sshriga di comando, la shell di login viene eseguita con -ce la stringa di comando¹ come argomenti; altrimenti la shell di login viene eseguita come shell di login senza argomenti.
Se esistesse un modo per bypassare la shell di accesso, sarebbe un buco nella sicurezza. Un account può essere configurato come un account limitato trasformando la sua shell di login in un programma che esegue solo un'attività specifica; per esempio, la shell di login potrebbe essere quella git-shelldi consentire l'accesso solo a un repository git, o rssh, ecc.
Per accedere a quella macchina, è necessario disporre /bin/zshdi essere presenti o modificare la shell di accesso in qualcosa che è presente.
Quello che raccomando in un ambiente eterogeneo come questo è attenersi alla /bin/shshell di login, perché è presente ovunque. Impostare la SHELLvariabile di ambiente su /bin/zshse è presente, in questo modo otterrai zsh come shell interattiva.
if [ -x /bin/zsh ]; then
export SHELL=/bin/zsh
fi
Mentre ci sei, questo ti consente di evitare di codificare il percorso verso zsh.
if SHELL=$(command -v zsh); then
export SHELL
else
unset SHELL
fi
Per far funzionare zsh automaticamente per un login in modalità testo, invocalo dal tuo .profile. Se vuoi usarlo .zprofileper configurare le cose, rendilo una shell di login (ma non otterrai lo stesso ambiente su macchine in cui zsh non è presente, quindi non lo consiglio). Fallo solo se si tratta di un accesso interattivo, non quando .profileviene eseguito da uno script, durante l'accesso in modalità GUI, ecc.
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
¹ Il client SSH concatena i suoi argomenti non-opzione con spazi tra, e invia la stringa risultante attraverso la connessione. I protocolli SSH definiscono il comando come una stringa, non un elenco di stringhe.
/bin/shmai pensato di cambiare la tua shell LDAP in qualcosa di più universale come e poi avere il tuo~/.profileexec remoto la shell appropriata se disponibile?