Je me connecte à un serveur distant via ssh en tant quutilisateur www-data
. Lutilisateur www-data
sur le serveur a son shell par défaut défini sur /bin/sh
, et quand je me connecte, je reçois le tiret comme shell. Je peux alors taper bash
et obtenir bash
shell.
Je voudrais me connecter directement à bash, quand Je ssh dedans. Mais je ne veux pas changer le shell par défaut sur le serveur. Je veux que ma modification naffecte que la session ssh.
Jai essayé de mettre command="/bin/bash"
en face de ma clé publique dans .ssh/authorized_keys
, mais cela a un autre effet secondaire: alors que bash fonctionne comme shell par défaut lors de la connexion, scp
a cessé de fonctionner. Je ne peux plus scp de fichiers vers ou depuis le serveur de restauration.
Comment puis-je définir bash
comme shell par défaut pour la session ssh, sans casser les autres applications?
Commentaires
syntaxe.
ssh
ne devrait avoir aucun effet sur scp
. Réponse
Jai un problème similaire sur un système Jutilise (le shell par défaut est bash
, je veux ksh93
, et chsh
ne « t travail).
Ma solution, adaptée à votre situation, est de exec
le shell souhaité de ~/.profile
, qui Dash lit au démarrage. Bash ne touche pas ~/.profile
à moins quil ne trouve ~/.bash_profile
ou ~/.bash_login
(dans cet ordre, voir le manuel 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 définit SSH_TTY
dans les sessions SSH interactives, donc nous » re-vérifier pour voir si cela est défini (chaîne non vide) avant de sassurer que Bash est disponible et de lexécuter. Je suis en train de configurer et dexporter SHELL
au cas où une autre application la regarderait, et pour éviter que Bash ne se retrouve dans une boucle infinie en raison de labsence des deux ~/.bash_profile
et ~/.bash_login
et ainsi essayer dexécuter à nouveau ~/.profile
.
Commentaires
- merci. Avec une modification importante, lapproche que vous suggérez fonctionne. Lexécution de
$SHELL -l
a provoqué une bombe à fourche. Apparemment,bash -l
lit également.profile
. Si vous omettez-l
, tout fonctionne comme prévu. - Probablement parce que vous navez pas les deux
~/.bash_profile
et~/.bash_login
? - Voir ma modification de ma réponse, ce qui rend le
if
échoue si nous ' exécutons déjà Bash. (pas sûr que ce soit vraiment nécessaire car il devrait récupérer les autres fichiers init à la place).
ssh [email protected] /bin/bash
na ' t fonctionné?