web-dev-qa-db-fra.com

Comment SSH dans un répertoire spécifique?

Je me connecte fréquemment à un serveur, puis cd dans un répertoire spécifique. Est-il possible de simplifier ces deux commandes en une seule?

ssh bob@foo  
cd /home/guest

J'aimerais éviter de changer quoi que ce soit sur 'foo' si possible, car je devrai le supprimer avec l'administrateur du serveur. J'utilise bash, mais je suis ouvert aux réponses dans d'autres coquilles.

41
spuder

Mettez simplement la dernière ligne de votre fichier ~ bob/.bash_profile sur foo:

cd /home/guest >& /dev/null

Maintenant, chaque fois que vous vous connectez (que ce soit par SSH ou autrement), la commande cd s'exécute. Aucun nettoyage avec ssh n'est nécessaire.

Je sais que vous avez écrit que vous "souhaitiez éviter de changer quoi que ce soit sur" foo "si possible", mais si le compte bob @ foo est le vôtre, changer votre propre .bash_profile devrait être acceptable, non?

24
DanB

Cela fonctionne avec OpenSSH:

ssh -t bob@foo 'cd /home/guest && exec bash -l'

Le dernier argument s'exécute dans votre shell de connexion. Le -t L'indicateur passé à ssh force ssh à allouer un pseudo-terminal, ce qui est nécessaire pour un shell interactif. Le -l l'indicateur passé à bash démarre bash comme shell de connexion .

41
user26112

Vous pouvez également le faire de cette façon, similaire à la solution de @ EvanTeitelman:

$ ssh -t bob@foo "cd /tmp ; bash"

Ou si vous ne connaissez pas le Shell à l'autre bout:

$ ssh -t bob@foo "cd /tmp && exec \$Shell"

Ou comme ça:

$ ssh -t bob@foo 'cd /tmp && exec $Shell'
17
slm