spécifier le shell pour la session ssh

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

  • ssh [email protected] /bin/bash na ' t fonctionné?
  • @DopeGhoti: I ' m aussi curieux à ce sujet, mais je soupçonne quil ' aura le même problème quavec son

syntaxe.

  • Jen doute, car le spécifier sur la ligne de commande 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).

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *