
Ich habe ein kleines Problem mit der Ausführung von Putty (von der Kommandozeile) mit-MArgument. Bitte helfen Sie mir dabei oder schlagen Sie einen besseren Weg vor, wenn Sie einen kennen :)
Der Befehl (von „Ausführen“):
putty -ssh user@machine -pw password -m C:\test.txt
Befehl „test.txt“:
PROMPT_COMMAND='echo -ne "\033]0;'$( ifconfig | head -2 | tail -1 | awk '{print $2}')'\007"'
Das Problem:
Es öffnet die Sitzung und schließt sie sofort wieder
Was soll es tun: Öffnen Sie eine SSH-Sitzung von der Befehlszeile mit dem definierten Titel
Danke.
Antwort1
Ich glaube, Sie haben versucht, etwas Ähnliches zu tun wie indiese Antwort. Die Sache ist jedoch, dass die dort bereitgestellten Beispielbefehle von der Datei auf dem Server ausgeführt werden sollen.
Sie können nicht als Befehl(e) zur Ausführung mit dem Schalter -m übergeben werden. Dieser Schalter von PuTTYist zu imitierendas Verhalten des Linux-Befehlszeilen-SSH-Clients:
ssh user@foo command
Auf diese Weise meldet sich ssh user
beim foo
Server an, wird command
dort ausgeführt und beendet sich dann. Mit -m scheint PuTTY genau dasselbe zu tun.
Mein Vorschlag
besteht darin, ein Skript auf dem Remote-Server vorzubereiten und PuTTY auf eine andere Weise zu konfigurieren. Zunächst müssen Sie eine Datei mit den Befehlen erstellen, die Sie nach der Anmeldung ausführen möchten. Nennen wir sie.title
cat > ~/.title
Geben Sie dann einfach ein, was Sie brauchen, oder kopieren Sie es und fügen Sie es ein. Drücken Sie anschließend Strg+D. Lassen Sie uns zunächst nur das Festlegen des Titels testen:
echo -ne "\033]0;PuTTY\007"
Sie können das oben genannte sogar direkt im Terminal ausprobieren. Wenn der Fenstertitel von PuTTY nicht geändert wird, ist Ihre Distribution wahrscheinlich bereits eingerichtetStandardvariable PROMPT_COMMAND. Sie können dies bestätigen, indem Sie die folgenden Befehle im Terminal ausführen
echo $PROMPT_COMMAND
unset PROMPT_COMMAND
echo -ne "\033]0;PuTTY test\007"
Der Schlüssel besteht darin, den aktuellen Wert der Variablen aufzuheben PROMPT_COMMAND
. Anschließend sollte der letzte Befehl den Fenstertitel auf setzen PuTTY test
.
Meine Lösung
Das funktioniert bei mir, indem ich eine Sitzung in PuTTY vorbereite, mitFeld „Remote-Befehl“ in der GUIeinstellen:
/bin/bash --rcfile ~/.title
Denken Sie daran, den Namen dieser Sitzung anzugeben (z. B. „SessionName“) und auf der ersten Seite der PuTTY-Einstellungen neben der Liste „Gespeicherte Sitzungen“ auf die Schaltfläche „Speichern“ zu klicken :)
Dann können Sie PuTTY starten und es anweisen, diese Sitzung zu laden
putty -load SessionName -l user -pw password
Ja, es ist traurig, aber es gibt kein Befehlszeilen-Äquivalent zum Feld „Remote-Befehl“ für eine gespeicherte Sitzung. Deshalb muss man all diese Hürden überwinden :(
TL;DR-Version
Vorausgesetzt, Sie führen alle diese Schritte richtig aus, sollte alles reibungslos funktionieren:
~/.title
Skript auf dem Remotecomputer erstellen- Bereiten Sie eine Sitzung mit einem Remote-Befehl vor, der Bash ausführt.
~/.title
- Sagen Sie PuTTY, dass es die vorbereitete Sitzung beim Start laden soll, und geben Sie dabei Benutzer und Passwort an.
Profi-Tipp
Anstatt Passwörter im Klartext in der Befehlszeile (und möglicherweise in Skripten) anzugeben, sollten Sie lernen, SSH-Schlüssel zu verwenden und „Pageant“ (PuTTY-Authentifizierungsagent) in der Windows-Taskleiste auszuführen.
Antwort2
Ich habe momentan kein SSH, um es zu testen, aberhttp://www.derkeiler.com/Newsgroups/comp.security.ssh/2012-04/msg00005.html
„Wenn Sie nur möchten, dass das Fenster für Sie geöffnet bleibt, fügen Sie sleep 10 am Ende Ihres Skripts ein, um 10 Sekunden zu warten. Wenn Sie die Shell verwenden möchten, verwenden Sie sie exec /bin/bash
am Ende. Shai“
zwei weitere Links, die einige Einblicke bieten.
PuTTY: Führen Sie nach der Anmeldung einen Remote-Befehl aus und lassen Sie die Shell weiterlaufen
Wie wähle ich aus, was in der Titelleiste von PuTTY unter Linux angezeigt wird?
Hinzugefügt von barlop
Im Folgenden wird kein Putty verwendet, sondern OpenSSH in Cygwin. Die a.a
Datei könnte ls oder Befehle zum Ändern der Eingabeaufforderung enthalten. Sie ist lokal.
$ ssh 127.0.0.1 "cat | bash" < a.a
bezogen, siehe Antwort, die ich gerade gepostet habe -https://unix.stackexchange.com/questions/87405/wie-kann-ich-ein-lokales-skript-auf-remote-machine-ausführen-und-arguments-einbinden/208952#208952