Sto accedendo a un server remoto tramite ssh come utente www-data
. Lutente www-data
sul server ha la sua shell predefinita impostata su /bin/sh
e quando effettuo laccesso, ottengo un trattino come shell. Quindi posso digitare bash
e ottenere bash
shell.
Vorrei accedere direttamente a bash, quando Ho eseguito ssh. Ma non voglio cambiare la shell predefinita sul server. Voglio che la mia modifica influisca solo sulla sessione ssh.
Ho provato a inserire command="/bin/bash"
davanti alla mia chiave pubblica in .ssh/authorized_keys
, ma questo ha un altro effetto collaterale: mentre bash funziona come shell predefinita durante laccesso, scp
smesso di funzionare. Non posso più file scp da o verso il server remore.
Come posso impostare bash
come shell predefinita per la sessione ssh, senza interrompere altre applicazioni?
Commenti
sintassi.
ssh
non dovrebbe avere alcun effetto su scp
. Risposta
Ho un problema simile su un sistema Io uso (la shell predefinita è bash
, voglio ksh93
e chsh
non “t work).
La mia soluzione, adattata alla tua situazione, è exec
la shell desiderata da ~/.profile
, che Dash legge allavvio. Bash non “tocca ~/.profile
a meno che” non trovi ~/.bash_profile
o ~/.bash_login
(in in questo ordine, vedere il manuale di Bash).
# in ~/.profile: if [ "$SHELL" != "/usr/bin/bash" -a -n "$SSH_TTY" -a -x /usr/bin/bash ]; then export SHELL="/usr/bin/bash" exec $SHELL -l fi
SSH imposta SSH_TTY
in sessioni SSH interattive, quindi ” ricontrollo per vedere se è impostato (stringa non vuota) prima di assicurarti che Bash sia disponibile ed eseguirlo. Sto impostando ed esportando SHELL
nel caso in cui qualsiasi altra applicazione la guardi, e per evitare che Bash incappi in un ciclo infinito a causa della mancanza di entrambi ~/.bash_profile
e ~/.bash_login
e quindi tentando di eseguire nuovamente ~/.profile
.
Commenti
- grazie. Con una modifica importante, lapproccio suggerito funziona. Lesecuzione di
$SHELL -l
ha provocato una bomba a forcella. A quanto pare,bash -l
legge anche.profile
. Quando ometti-l
, tutto funziona come previsto. - Probabilmente perché ti mancano entrambi
~/.bash_profile
e~/.bash_login
? - Visualizza la mia modifica alla mia risposta, il che rende
if
fallisce se ' sta già eseguendo Bash. (non sono sicuro che sia veramente richiesto poiché dovrebbe invece raccogliere gli altri file di inizializzazione).
ssh [email protected] /bin/bash
' t funzionava?