125 votes

Comment puis-je changer automatiquement de répertoire lors d'une connexion ssh ?

J'essaie d'obtenir ssh pour passer automatiquement à un répertoire particulier lorsque je me connecte. J'ai essayé de faire fonctionner ce comportement en utilisant les directives suivantes dans le fichier ~/.ssh/config :

Host example.net
LocalCommand "cd web"

mais chaque fois que je me connecte, je vois ce qui suit :

/bin/bash: cd web: No such file or directory

bien qu'il y ait définitivement un web dans mon répertoire personnel. Même l'utilisation d'un chemin absolu donne le même message. Pour être clair, si je tape cd web Après m'être connecté, j'arrive dans le bon dossier.

Qu'est-ce que je rate ici ?

EDITAR:

Différentes combinaisons de guillemets/chemins absolus donnent des messages d'erreur différents :

LocalCommand "cd web"
/bin/bash: cd web: No such file or directory

LocalCommand cd web
/bin/bash: line 0: cd: web: No such file or directory

LocalCommand cd /home/gareth/web
/bin/bash: line 0: cd: /home/gareth/web: Input/output error

Cela me fait penser que les guillemets ne devraient pas être là, et qu'il y a une autre erreur.

94voto

Vladislav Lezhnev Points 981

Ça marche :

ssh server -t "cd /my/remote/directory; bash --login"

Pour créer un répertoire s'il n'existe pas :

ssh server -t "mkdir -p newfolder; cd ~/newfolder; pwd; bash --login"

Si vous n'ajoutez pas bash jusqu'à la fin du chemin puis vous sortez après la cd de la commande. Et si vous n'ajoutez pas --login alors votre ~/.profile n'a pas de source.

70voto

sobi3ch Points 823
  1. Connectez-vous à votre boîte
  2. Editar ~/.bash_profile
  3. À la fin du fichier, ajoutez cd /path/to/your/destination
  4. Sauvegarder et quitter
  5. Déconnexion de la boîte
  6. Connectez-vous à nouveau et vous devriez atterrir sur /path/to/your/destination

_Note (décembre 2021) : Comme @Matthias l'a souligné, sur certaines machines, vous devrez peut-être ajouter votre commande à ~/.bashrc au lieu de ~/.bash_profile ._

59voto

BMDan Points 7059

cd est un Shell intégré. LocalCommand est exécuté comme :

/bin/sh -c <localcommand>

Ce que vous cherchez à faire ne peut pas vraiment être accompli via SSH ; vous devez modifier le Shell d'une manière ou d'une autre, par exemple via bashrc/bash_profile .

<Editer presque une décennie plus tard...>

LocalCommand n'est pas ce que vous voulez, de toute façon. C'est géré par su machine.

Vous voulez RemoteCommand . Quelque chose comme ça a marché pour moi :

Host example.net
  RemoteCommand cd / && exec bash --login
  RequestTTY yes

5voto

Samat Jain Points 165

Avez-vous activé cette directive dans votre configuration ssh ?

PermitLocalCommand yes

La valeur par défaut pour cela est no dans ce cas, votre LocalCommand sera ignorée.

Alternativement, avez vous essayé d'ajouter la commande à votre .bashrc fichier ?

3voto

jason saldo Points 5036

Dans votre ~/.ssh/config :

LocalCommand echo '/home/%r/some/subdir' > /home/%r/.ssh/ssh_cd

A la fin de votre ~/.bashrc :

if [[ -f $HOME/.ssh/ssh_cd ]]
then
    cd $(<$HOME/.ssh/ssh_cd)
    # uncomment the line below and the file will be removed so the cd won't work
    # unless the file is regenerated since you may not want this to operate for
    # non-ssh logins or for ssh logins that you want to function differently
    # rm $HOME/.ssh/ssh_cd
fi

J'ai essayé de le faire en utilisant le passage de variable, y compris avec une variable exportée, mais ces commandes sont exécutées dans des shells différents.

En testant ce que vous essayez de faire, je n'ai pas obtenu d'erreur lorsque j'ai utilisé le chemin absolu non cité, d'ailleurs. J'ai ajouté ; pwd à la fin de la commande et le bon répertoire s'affiche, mais le répertoire dans lequel je me retrouve est le suivant ~ . Il n'y a pas de cd dans mes fichiers de démarrage Shell. J'ai essayé de mettre un autre cd somedir; pwd en ~/.ssh/rc (l'autre étant toujours en place). Le site config est exécutée avant que le motd ne soit émis et que la commande rc est émise après, mais avant que les fichiers de démarrage de Shell ne soient sourcés. Donc encore une fois, ça se passe dans une Shell différente.

Essayez la technique du passage par fichier et faites-moi savoir si cela fonctionne pour vous.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X