Wie führe ich nach dem Login einen Remote-Befehl in PuTTY aus und lasse die Shell weiter laufen?

35

Was ich versuche zu tun: Starten Sie eine PuTTY-Sitzung über die Befehlszeile, melden Sie sich auf dem Remote-Computer und cdim angegebenen Verzeichnis an.

putty.exe -agent -ssh some.host

Dadurch wird eine Sitzung mit meinem Standard-Anmeldenamen und meinem privaten Schlüssel geöffnet.

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

Das öffnet eine Sitzung, meldet sich an, führt einen Befehl aus ( cdin diesem Fall) und beendet sich .

Wie eröffne ich eine Sitzung, melde mich an cdund halte die Sitzung offen?

Hintergrund: Ich verwende Emacs unter Windows und bearbeite häufig Dateien auf entfernten Unix-Rechnern mit tramp & plink. Ich möchte einen Hotkey erstellen, der eine PuTTY-Sitzung für diesen Remote-Computer und Chdirs in das Verzeichnis dieser Datei öffnet. Keine große Sache auf der Emacs-Seite, aber ich bin fest mit PuTTY.

Artyom V. Kireev
quelle

Antworten:

33

Dies -mbewirkt, dass PuTTY den SSH-Server anweist, diese Befehle STATT einer Shell zu starten. Sobald Ihr Befehl beendet ist, ist auch die Sitzung beendet.

Wenn Sie die Shell nach dem cdBefehl ausführen möchten , müssen Sie sie explizit wie folgt hinzufügen cmd.txt:

cd /my/path ; /bin/bash

Auch -mimpliziert der "nopty" ​​/ nicht interaktive Modus. Um eine interaktive Shell zu verwenden, müssen Sie diese mit dem -tSchalter überschreiben .

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

Verwenden Sie alternativ KiTTY mit seinem -cmdSchalter, der das tut, was Sie wollen (und keine temporäre Datei benötigt).

Martin Prikryl
quelle
Ich habe versucht, das (Hinzufügen von / bin / bash zu cmd.txt) und das funktioniert nicht. Soweit ich weiß, startet bash im nicht interaktiven Modus und wird beendet, da kein Code ausgeführt werden muss. Gibt es eine Möglichkeit, auf diese Weise eine interaktive Shell zu starten?
Artyom V. Kireev
In der Zwischenzeit habe ich versucht, mc zu starten. :-) Es hat nicht und lieferte einige Ausgabe:Cannot get terminal settings: Invalid argument (22) TERM environment variable needs set.
Artyom V. Kireev
Vielen Dank für die Anleitung hier, aber ich habe anscheinend ein Problem beim Versuch, mit Putty -m "myfile.sh" -teine Verbindung zu einem tinycorelinux-VM (/ bin / ash) herzustellen. Ich erhalte folgenden Fehler: i.imgur.com/QN5oRXC.png (mein Skript beginnt echo ".."immer mit dem ersten Buchstaben in meinem Skript nach den unzulässigen Zeichen
Vincent De Smet
Wenn ich einen Remote-Befehl im Kitt-Profil verwende, funktioniert er
Vincent De Smet,
-1

Die Tramp-Sitzung, die Sie in Emacs starten, und die Shell-Sitzung, die Sie über Putty ausführen, sind völlig separate Prozesse.

Wahrscheinlich ist es besser, die Konfigurationsoptionen für tramp zu überprüfen, um festzustellen, ob es eine Möglichkeit gibt, ein Standardverzeichnis pro Host in Ihrer emacs-Konfiguration festzulegen. Beginnen Sie möglicherweise mit der hier dokumentiertentramp-remote-path Konfigurationsoption .

Wenn Sie Putty verwenden müssen, um die Verbindung herzustellen, möchten Sie wahrscheinlich einen SSH-Tunnel einrichten und Emacs / Tramp damit verbinden.

Doug Harris
quelle
Emacs & Tramp sind hier irrelevant, ich habe das nur für den Hintergrund hinzugefügt. Es geht nicht darum, Dateien in Emacs zu bearbeiten, sondern darum, eine Shell zu öffnen, um etwas anderes mit dieser Datei zu tun (z. B. ein Skript auszuführen). Ich habe es satt, "Putty zu starten, dich als Host auszuwählen und dann auf den Pfad zu wechseln, den du brauchst", und möchte das automatisieren.
Artyom V. Kireev