Comment SSH dans un répertoire spécifique?

39

Je me connecte souvent à 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

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

spuder
la source

Réponses:

22

Il suffit de mettre comme 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 sera exécutée. Pas besoin de saccager avec SSH.

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, modifier votre propre .bash_profile devrait être acceptable, non?

DanB
la source
2
Pourquoi oui, je pense que cela fonctionnera très bien. Je n'aurai pas besoin d'obtenir la permission du service informatique pour effectuer ce changement. Pourriez-vous expliquer pourquoi vous avez besoin de> & / dev / null?
spuder
6
Je pense que cela devrait être &> /dev/null. Il empêche tout message d'erreur pouvant s'afficher au cas où cd ne parviendrait pas à changer de répertoire en / home / directory. Si vous voulez voir ces messages, vous pouvez simplement les exclure.
Konsolebox
5
>&et &>sont les mêmes dans Bash. Ce dernier style est toutefois préféré.
De plus, la redirection vers / dev / null empêche l'affichage en écho du nom du répertoire, ce que "cd" peut faire.
DanB
41

Cela fonctionne avec OpenSSH:

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

Le dernier argument est exécuté dans votre shell de connexion. Le -tdrapeau passé aux sshforces sshpour allouer un pseudo-terminal, ce qui est nécessaire pour un shell interactif. Le -ldrapeau passé à bashcommence par bash en tant que shell de connexion .

Communauté
la source
3
Je me demande si l'ajout de l'option -l à bash serait également utile. ... && exec bash -l
konsolebox
1
@ konsolebox: C'est une bonne idée. J'ai ajouté cela à ma réponse.
17

Vous pouvez également le faire de la manière suivante, similaire à la solution de @ EvanTeitelman:

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

Ou si vous ne connaissez pas la coquille à l'autre bout:

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

Ou comme ceci:

$ ssh -t bob@foo 'cd /tmp && exec $SHELL'
slm
la source