Ich versuche, eine Windows-Batchdatei zu erstellen, die Putty / Plink mit Portweiterleitung startet, und sonst nichts. Der Windows-Teil ist soweit fertig:
start plink.exe -ssh -i key.ppk -L 1234:localhost:80 sampleUser@192.168.0.1
Da ich nicht zulassen möchte, dass andere Befehle nach der Authentifizierung ausgeführt werden, verwende ich ForceCommand
eine Match User
Deklaration:
Match User sampleUser
ForceCommand echo 'Success! Close this window to log out.'
Das Problem ist, dass das Ausführen meiner Batch-Datei Putty korrekt startet, aber sofort nach dem Ausführen des Echo meines angegebenen Textes geschlossen wird.
Meine Idee ist, so etwas zu verwenden:
ForceCommand echo 'Success! Close this window to log out.' && waitTillControlC
Auf diese Weise sollte Putty / SSH die Verbindung aufrecht erhalten und meine Portweiterleitung nicht beenden.
Ich habe wie von Befehlen gedacht yes
, ping
oder read
aber sie
- spammen mein Terminalfenster
- machen tatsächlich Sachen / erzeugen unnötige CPU-Last
- könnte unerwartet schließen, wenn jemand die Eingabetaste drückt
Gibt es einen Befehl, der für immer nichts tut, bis jemand ihn mit Strg + C beendet oder die SSH-Verbindung durch Schließen des Kittfensters schließt?
Wofür soll ich verwenden waitTillControlC
?
Antworten:
Ich verstehe nicht, warum alle anderen Antworten hier eine Schleife verwenden möchten, der Schlaf kann lange genug auf einen praktischen Zweck warten und verwendet dabei keine Taktzyklen.
Zum Beispiel wird es hier versuchen, zweifelhafte hundert Jahre zu schlafen, und es wird wahrscheinlich genug tun, um der Bitte trotzdem nachzukommen:
Alternativ sollte dies auch blockiert werden, bis Sie den EnterSchlüssel eingeben:
quelle
Versuchen Sie
-N
stattdessen die Option. Aus derplink
Dokumentation :Dies ist das gleiche Verhalten wie bei der
ssh
Option-N
, wie in der Manpage beschrieben :quelle
I don't want to allow to execute other commands after authentication
.-N
würde dies auf der Clientseite erreichen, so dass Sie einfach -N entfernen könnten, um andere Befehle nach der Authentifizierung auszuführen.Dies sollte für immer schlafen, ohne (spürbare) Menge an CPU-Leistung zu verbrauchen.
Ich bin mir auch nicht sicher, ob Sie einen Befehl wie in der
ForceCommand
Klausel geben können. Möglicherweise müssen Sie den Befehl in ein Shell-Skript einfügen.Dieses Skript sollte sich natürlich an einem Ort befinden und über Berechtigungen verfügen, sodass kein gewöhnlicher Benutzer auf dem Server darauf schreiben kann.
Bearbeiten
Ich habe einen Befehl gefunden, der eleganter erscheint:
tail -f
Wartet darauf, dass eine Datei oder ein Stream Bytes zurückgibt. (Andernfalls nützlich, um Protokolle in Echtzeit zu überwachen.)/dev/null
Gibt niemals Bytes zurück. Und so wird der Befehl für immer schlafen.quelle
ForceCommand echo 'congrats' && while true; do sleep 9999; done
tail -f /dev/null
ist technisch schlechter als die 9999-Schleife. Der Vorgang wird jede Sekunde statt alle 2 Stunden und 56 Minuten aktiviert.inotify
falsch verwendet?tail
wird optimiert, um sie zu nutzen,inotify
wenn sie verfügbar ist. Dies sollte der Standardfall bei den meisten, wenn nicht allen aktuellen Distributionen sein. Ich habe jedoch gerade auf einem Linux-Laptop getestet und beimtail
Überwachen falsche Aktivitäten beobachtet,/dev/null
so dass es sicherlich schlimmer ist, in Bezug auf Taktzyklen zu schlafen.tail
das immer jede Sekunde aufwachen wird. Ein möglicher Grund für das Ergebnis ist, dass Sie es in einem Terminal ausführen, mit dem möglicherweisetail
aus irgendeinem Grund kommuniziert wird , während diessleep
nicht der Fall ist . Es gibt keinen Grund, warumtail
man nur die Überwachung fälschlicherweise aufwachen sollte/dev/null
.Sie können einfach Folgendes ausprobieren:
quelle
sleep
Zeitraum wird die CPUsleep 1
:
ist eine Abkürzung fürtrue
. Ich würde auchsleep
aus Prinzip eine längere Zeit bevorzugen .Sie versuchen, dies vom falschen Ende aus zu lösen. Sie möchten nicht, dass die Shell nicht beendet wird, Sie möchten, dass Kitt das Fenster offen lässt.
http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter4.html#config-closeonexit - beschreibt genau, was Sie ändern müssen. Wenn Sie die Option "Nur bei sauberem Beenden" verwenden möchten, fügen Sie sie einfach
exit 1
am Ende des ForceCommand hinzu.Edit: Ich habe falsch verstanden; Sie möchten nur die weitergeleiteten Ports beibehalten, Sie möchten die Ausgabe des ForceCommand nicht beibehalten. In diesem Fall macht http://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter4.html#config-ssh-noshell nicht das, was Sie wollen?
quelle