J'essaie de passer ssh
automatiquement à un répertoire particulier lorsque je me connecte. J'ai essayé de résoudre ce problème en utilisant les directives suivantes ~/.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
dossier dans mon répertoire personnel. Même en utilisant un chemin absolu donne le même message. Pour être clair, si je tape cd web
après la connexion, je suis dans le bon dossier.
Qu'est-ce que j'oublie ici?
MODIFIER:
Différentes combinaisons de guillemets / chemins absolus donnent différents messages d'erreur:
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 citations ne devraient pas être là et qu'il se produit une autre erreur.
Réponses:
cd est un shell intégré. LocalCommand est exécuté en tant que: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.<Montage presque une décennie plus tard ...>
LocalCommand
ce n'est pas ce que tu veux, de toute façon. C'est exécuté sur votre machine. Vous voulezRemoteCommand
. Quelque chose comme ça a fonctionné pour moi:la source
cd
commande~/.bashrc
sur le serveur distant.Cela marche:
Pour créer un répertoire s'il n'existe pas:
Si vous n'ajoutez pas
bash
à la fin du chemin, vous quittez après l'cd
exécution de la commande. Et si vous n’ajoutez pas,--login
votre~/.profile
source ne provient pas.la source
~/.bash_profile
cd /path/to/your/destination
/path/to/your/destination
la source
cd /path/to/your/destination
à~/.bashrc
au lieu de~/.bash_profile
. Le résultat devrait être le même.~/.bash_profile
ou~/.bashrc
n'affectera que l'utilisateur actuel.Solution plus robuste pour le cas où vous avez besoin de ssh et de remplacer le fichier .bashrc par défaut. Ceci est utile dans les cas où l'environnement de serveur distant a plusieurs docroots et utilisé par plusieurs utilisateurs.
Plus détaillé:
.bashrc_tmp
fichier dans le/tmp
répertoire sur le serveur distant avec un contenucd /path/to/dir
bash
avec le fichier de configuration spécifié à l’étape 1. Cette opération permet de basculer sur le répertoire souhaité et de supprimer les valeurs par défaut.bashrc
.alias
invite de commande client ssh, elle peut donc être appeléessh_myserver
la source
Avez-vous activé cette directive dans votre configuration ssh?
La valeur par défaut pour cela est
no
, auquel cas votreLocalCommand
directive serait ignorée.Sinon, avez-vous essayé d'ajouter la commande à votre
.bashrc
fichier?la source
J'ai donc cherché beaucoup de sites Web (stackoverflow, celui-ci) mais je n'ai pas trouvé ce que je voulais. J'ai fini par créer mon propre script shell. Je le colle ici. Aussi, vous pouvez copier un répertoire dans $ PATH.
Donc après ça. Je fais:
Remarque: vous devrez peut-être vous déconnecter et vous reconnecter après avoir modifié la variable de chemin d'accès.
la source
Dans votre
~/.ssh/config
:A la fin de votre
~/.bashrc
:J'ai essayé de faire cela en passant des variables, y compris avec une variable exportée, mais ces commandes sont exécutées dans des shells différents.
En passant, en testant ce que vous essayiez de faire, je n'ai pas eu d'erreur lorsque j'ai utilisé le chemin absolu non indiqué. J'ai ajouté
; pwd
à la fin de la commande et le bon répertoire est affiché, mais le répertoire dans lequel je me trouve est~
. Il n'y a pas decd
commandes dans mes fichiers de démarrage du shell. J'ai essayé de mettre un différentcd somedir; pwd
dans~/.ssh/rc
(avec l'autre toujours en place). Laconfig
commande est exécutée avant que motd soit émis, puisrc
après, mais avant la création des fichiers de démarrage du shell. Encore une fois, cela se passe dans une coquille différente.Essayez la technique de passe par fichier et laissez-moi savoir si cela fonctionne pour vous.
la source
L'avez-vous essayé sans les guillemets? Les seuls exemples que j'ai vus ne les ont pas, ils pourraient donc essayer d'exécuter cd \ web en tant que commande.
la source
Vous pouvez aussi essayer ceci avec l'option
-t
:la source
Essayez d'utiliser à la
RemoteCommand
place, par exemplela source