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 -lha provocato una bomba a forcella. A quanto pare,bash -llegge anche.profile. Quando ometti-l, tutto funziona come previsto. - Probabilmente perché ti mancano entrambi
~/.bash_profilee~/.bash_login? - Visualizza la mia modifica alla mia risposta, il che rende
iffallisce 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?