specifica la shell per la sessione ssh

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

  • ssh [email protected] /bin/bash ' t funzionava?
  • @DopeGhoti: I ' m anche curioso, ma sospetto che ' avrà lo stesso problema con il suo

sintassi.

  • Ne dubito, poiché specificarlo sulla riga di comando 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).

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *