Je dois souvent me connecter à l'un des serveurs et aller dans l'un des répertoires de ces machines. Actuellement, je fais quelque chose de ce genre:
localhost ~] $ ssh somehost Bienvenue chez somehost! somehost ~] $ cd / certains / répertoire / quelque part / nommé / Foo quelque chose Foo] $
J'ai des scripts qui peuvent déterminer dans quel hôte et dans quel répertoire je dois accéder, mais je ne peux pas trouver un moyen de le faire:
localhost ~] $ go_to_dir Foo Bienvenue chez somehost! quelque chose Foo] $
Existe-t-il un moyen simple, intelligent ou de le faire?
ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted && exec \$SHELL"
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
ssh server -t "cd /my/remote/directory; bash --login"
Vous pourriez ajouter
à votre
.bashrc
fichier (ou.profile
comme vous l'appelez) sur l'autre hôte. De cette façon, peu importe ce que vous faites ou d'où vous venezssh
, chaque fois que vous vous connectez à ce serveur, il seracd
dans le répertoire approprié pour vous, et tout ce que vous avez à faire est de l'utiliserssh
comme d'habitude.Bien sûr, la solution de rogeriopvl fonctionne aussi, mais c'est un peu plus verbeux, et vous devez vous rappeler de le faire à chaque fois (à moins que vous ne fassiez un alias), donc cela semble un peu moins "amusant".
la source
J'ai créé un outil pour SSH et CD dans un serveur consécutivement - bien nommé sshcd . Pour l'exemple que vous avez donné, vous utiliseriez simplement:
Faites-moi savoir si vous avez des questions ou des problèmes!
la source
Mon approche préférée consiste à utiliser le fichier de configuration SSH (décrit ci-dessous), mais il existe quelques solutions possibles en fonction de vos utilisations.
Arguments de ligne de commande
Je pense que la meilleure réponse à cette approche est la réponse de christianbundy à la réponse acceptée:
L'utilisation de guillemets doubles vous permettra d'utiliser des variables de votre machine locale, à moins qu'elles ne soient échappées (comme
$SHELL
ici). Alternativement, vous pouvez utiliser des guillemets simples, et toutes les variables que vous utilisez seront celles de la machine cible:Fonction Bash
Vous pouvez simplifier la commande en l'enveloppant dans une fonction bash. Disons que vous voulez juste taper ceci:
Vous pouvez faire ce travail en l'ajoutant à votre
~/.bashrc
:Si vous utilisez une variable qui existe sur la machine distante pour le répertoire, assurez-vous de l'échapper ou de la mettre entre guillemets simples. Par exemple, cela va cd dans le répertoire qui est stocké dans la
JBOSS_HOME
variable sur la machine distante:Fichier de configuration SSH
Si vous souhaitez voir ce comportement tout le temps pour des hôtes spécifiques (ou n'importe quel) avec la commande ssh normale sans avoir à utiliser des arguments de ligne de commande supplémentaires, vous pouvez définir les options
RequestTTY
etRemoteCommand
dans votre fichier de configuration ssh.Par exemple, je voudrais taper uniquement cette commande:
mais je veux qu'il se comporte toujours comme cette commande:
J'ai donc ajouté ceci à mon
~/.ssh/config
dossier:Maintenant, cette règle s'applique à tout hôte avec "apps" dans son nom d'hôte.
Pour plus d'informations, voir http://man7.org/linux/man-pages/man5/ssh_config.5.html
la source
Sur la base des ajouts à la réponse de @ rogeriopvl, je suggère ce qui suit:
En enchaînant les commandes par
&&
, la commande suivante ne s'exécutera que lorsque la précédente a réussi (par opposition à l'utilisation;
, qui exécute les commandes séquentiellement). Ceci est particulièrement utile lorsque vous avez besoincd
d'un répertoire exécutant la commande.Imaginez faire ce qui suit:
Le répertoire
teminal
n'existe pas, ce qui vous oblige à rester dans le répertoire de base et à supprimer tous les fichiers qu'il contient avec la commande suivante.Si vous utilisez
&&
:La commande échouera après ne pas avoir trouvé le répertoire.
la source
Dans mon cas très spécifique, je voulais juste exécuter une commande dans un hôte distant, à l'intérieur d'un répertoire spécifique d'une machine esclave Jenkins:
Mais ma machine n'a pas pu exécuter le ssh (elle n'a pas pu allouer un pseudo-tty je suppose) et m'a continué à donner l'erreur suivante:
Je pourrais contourner ce problème en passant "cd à dir + ma commande" comme paramètre de la commande ssh (pour ne pas avoir à allouer un pseudo-terminal) et en passant l'option -T pour dire explicitement à la commande ssh que je n'ai pas fait pas besoin d'allocation pseudo-terminale.
la source
J'utilise la variable d'environnement CDPATH
la source
aller plus loin avec l'
-t
idée. Je garde un ensemble de scripts appelant celui-ci pour aller à des endroits spécifiques de mes hôtes fréquemment visités. Je les garde tous dedans~/bin
et je garde ce répertoire sur mon chemin.la source
Une autre façon d'accéder directement après la connexion est de créer un "Alias". Lorsque vous vous connectez à votre système, tapez simplement cet alias et vous serez dans ce répertoire.
Exemple: Alias = mon dossier '/ var / www / Dossier'
Après vous être connecté à votre type de système, cet alias (cela fonctionne à partir de n'importe quelle partie du système),
cette commande si elle n'est pas dans bashrc, fonctionnera pour la session en cours. Vous pouvez donc également ajouter cet alias à bashrc pour l'utiliser à l'avenir
$ myfolder => vous emmène dans ce dossier
la source
SSH lui-même fournit un moyen de communication, il ne sait rien des répertoires. Puisque vous pouvez spécifier la commande à distance à exécuter (c'est - par défaut - votre shell), je commencerais par là.
la source
modifiez simplement votre maison avec la commande:
usermod -d /newhome username
la source