PuTTY: exécutez une commande à distance après la connexion et maintenez la coque en cours d'exécution

Ce que j'essaie de faire: démarrez une session PuTTY à partir de la ligne de commande, connectez-vous à la machine distante et au répertoire cd to provided.

 putty.exe -agent -ssh some.host 

Cela ouvrira une session et une connexion avec mon identifiant par défaut et la clé privée.

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

Cela ouvrira une session, vous connecter, exécuter une commande ( cd dans ce cas) et quitter .

Comment puis-je ouvrir une session, ouvrir une session, un cd et garder la session ouverte?

Contexte: J'utilise Emacs sous Windows et j'existe souvent des fichiers sur des machines Unix distantes à l'aide de Tramp & plink. Je veux créer un raccourci qui ouvre une session PuTTY pour cette machine distante et chdirs dans le répertoire de ce fichier. Pas grand chose sur le côté Emacs, mais je suis coincé avec PuTTY.

    Ce que fait -m , c'est que PuTTY oblige le serveur SSH à démarrer cette (ses) commande (s) INSTEAD d'un shell. Donc, une fois que votre commande est terminée, il en va de même pour la session.

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

     cd /my/path ; /bin/bash 

    En outre, le -m implique "nopty" ​​/ mode non interactif. Pour utiliser un shell interactif, vous devez l'annuler en utilisant le commutateur -t .

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

    Alternativement, utilisez KiTTY avec son commutateur -cmd , ce qui fait ce que vous voulez (et n'a pas besoin d'un fichier temporaire).

    La session Tramp que vous commencez à emacs et la session shell que vous exécutez via le mastic sont des processus complètement distincts.

    Vous êtes probablement mieux de vérifier les options de configuration pour tramp pour voir s'il existe un moyen de définir un répertoire par défaut par hôte dans votre configuration emacs. Peut-être que commencez par l'option de tramp-remote-path comme documenté ici .

    Si vous devez utiliser le mastic pour établir la connexion, vous souhaitez probablement configurer un tunnel ssh et faire en sorte que Emacs / Tramp vous connecte.