Comment exécuter une commande à distance dans PuTTY après la connexion et garder le shell en marche?

35

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

putty.exe -agent -ssh some.host

Cela ouvrira une session et un login avec mon identifiant 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 va ouvrir une session, vous connecter, exécuter une commande ( cddans ce cas) et quitter .

Comment ouvrir une session, me connecter cdet garder la session ouverte?

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

Artyom V. Kireev
la source

Réponses:

33

Cela -msignifie que PuTTY demande au serveur SSH de lancer cette commande au lieu d’un shell. Donc, une fois votre commande terminée, la session aussi.

Si vous voulez exécuter le shell après la cdcommande, vous devez l'ajouter explicitement à votre cmd.txt, comme:

cd /my/path ; /bin/bash

Le mode -m"nopty" ​​/ non-interactif est également impliqué. Pour utiliser un shell interactif, vous devez le remplacer à l'aide du -tcommutateur .

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

Vous pouvez également utiliser KiTTY avec son -cmdcommutateur, qui fait ce que vous voulez (et n’a pas besoin d’un fichier temporaire).

Martin Prikryl
la source
J'ai essayé cela (en ajoutant / bin / bash à cmd.txt) et cela ne fonctionne pas. Pour autant que je sache, bash commence en mode non interactif et, n'ayant aucun code à exécuter, quitte. Est-il possible de créer un shell interactif de cette façon?
Commentaires
En attendant, j'ai essayé de démarrer mc. :-) Cela n'a pas été le cas et a fourni quelques résultats:Cannot get terminal settings: Invalid argument (22) TERM environment variable needs set.
Artyom V. Kireev
Merci pour la ligne directrice ici, mais je semble avoir un problème en essayant d'utiliser du mastic -m "myfile.sh" -tpour se connecter à un tinycorelinux vm (/ bin / ash). J'obtiendrai l' erreur suivante: i.imgur.com/QN5oRXC.png (mon script commence par echo ".."il affichera toujours la première lettre de mon script après les caractères illégaux
Vincent De Smet, le
si j'utilise configurer une commande à distance dans le profil de mastic, cela fonctionne
Vincent De Smet
-1

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

Vous ferez probablement mieux de vérifier les options de configuration de tramp pour voir s’il est possible de définir un répertoire par défaut par hôte dans votre configuration emacs. Commencez peut-être par l’ tramp-remote-pathoption de configuration décrite ici .

Si vous devez utiliser du mastic pour établir la connexion, vous voudrez probablement configurer un tunnel SSH et laisser emacs / tramp se connecter via cela.

Doug Harris
la source
Emacs & tramp ne sont pas pertinents ici, j'ai ajouté cela juste pour le fond. Cela ne concerne pas l'édition de fichier dans emacs, mais l'ouverture d'un shell pour faire autre chose avec ce fichier (par exemple, exécuter un script). J'en ai marre de "commencez putty, choisissez votre hôte, puis cd vers le chemin dont vous avez besoin", et souhaitez automatiser cela.
Commentaires