49 votes

Comment exécuter une commande à distance dans PuTTY après la connexion et garder le Shell en cours d'exécution ?

Ce que j'essaie de faire : démarrer une session PuTTY à partir de la ligne de commande, se connecter à la machine distante et cd dans le répertoire fourni.

putty.exe -agent -ssh some.host

Cela ouvrira une session et me permettra de me connecter avec mon nom de connexion par défaut et ma clé privée.

echo cd /some/remote/path/ > c:/stuff/cmd.txt
putty.exe -agent -ssh some.host -m 'c:/stuff/cmd.txt'

Cela permet d'ouvrir une session, de se connecter, d'exécuter une commande ( cd dans ce cas) et quitter .

Comment ouvrir une session, se connecter, cd et maintenir la session ouverte ?

Contexte : J'utilise emacs sous Windows et j'édite souvent des fichiers sur des machines Unix distantes en utilisant tramp & plink. Je veux créer un raccourci clavier qui ouvre une session PuTTY pour cette machine distante et chdir dans le répertoire de ce fichier. Ce n'est pas un gros problème du côté d'emacs, mais je suis coincé avec PuTTY.

46voto

Martin Prikryl Points 18838

Qu'est-ce que la -m est que PuTTY demande au serveur SSH de lancer cette (ces) commande(s) AU LIEU d'un Shell. Ainsi, une fois votre commande terminée, la session l'est également.

Si vous souhaitez exécuter le Shell après la commande cd vous devez l'ajouter explicitement à la commande cmd.txt , comme :

cd /my/path ; /bin/bash

De même, le -m implique le mode "nopty"/non-interactif. Pour utiliser un Shell interactif, vous devez passer outre en utilisant l'option -t interrupteur .

putty.exe -ssh example.com -m "c:\path\cmd.txt" -t

Vous pouvez également utiliser KiTTY avec son -cmd switch, qui fait ce que vous voulez (et ne nécessite pas de fichier temporaire).

1voto

Braiam Points 4649

Vous avez besoin des deux -t et un Shell pour maintenir la session en cours. Lorsque votre Shell revient, il n'y a pas de Shell pour garder le contrôle de la session, et le serveur met donc fin à la connexion. Vous devez démarrer tmux ou un Shell pour que le serveur ne mette pas fin à la connexion lorsque vos commandes cessent d'être exécutées. Mais cela introduit une autre complexité : comment afficher les résultats de vos commandes sur le terminal.

La solution la plus naïve que j'ai trouvée est d'exécuter les commandes et d'appeler un Shell à la fin (/bin/bash ou ce que votre hôte a à disposition). Cela permet aux résultats des Shell précédents d'être lus et vous fait entrer dans un Shell interactif. Cette méthode est limitée par le fait que vous ne pouvez pas configurer votre session Shell, puisqu'elle revient immédiatement en exécutant la commande que vous lui avez demandée, et le serveur met alors fin à la session.

-1voto

Keith Sirmons Points 2558

La session tramp que vous démarrez dans emacs et la session Shell que vous exécutez via putty sont des processus complètement séparés.

Il est probablement préférable de vérifier les options de configuration de tramp pour voir s'il existe un moyen de définir un répertoire par défaut par hôte dans la configuration d'emacs. Commencez peut-être par l'option tramp-remote-path l'option de configuration comme documenté ici .

Si vous avez besoin d'utiliser putty pour établir la connexion, vous voudrez probablement mettre en place un tunnel ssh et faire en sorte qu'emacs/tramp se connecte à travers ce tunnel.

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