Wenn ich über ssh eine Verbindung zu bestimmten Servern herstelle, kommt es zu einem Timeout und "friert" das Terminal ein (akzeptiert keine Eingaben, trennt die Verbindung nicht, kann nicht mit Strg-C den ssh-Prozess beenden oder so).
Dies ist in Ubuntu der gnome-terminal
Fall , obwohl es den Ein- / Ausgang des Terminals anzuhalten scheint und den Betrieb der GNOME-Terminal-Software selbst nicht beeinträchtigt. Also weniger ein Bug mit gnome-terminal
als eine nervige Inkonsistenz mit ssh.
Gibt es eine Möglichkeit, das Terminal von SSH-Verbindungen, deren Zeitüberschreitung abgelaufen ist, abzuhalten bzw. wiederzugewinnen?
ssh
terminal
timeout
gnome-terminal
Kzqai
quelle
quelle
Antworten:
sshd (der Server) beendet die Verbindung, wenn er eine Weile nichts vom Client hört. Sie können Ihren Client anweisen, von Zeit zu Zeit ein Lebenszeichensignal an den Server zu senden.
Die Konfiguration hierfür befindet sich in der Datei
~/.ssh/config
. Um das Signal alle vier Minuten an den Remote-Host zu senden, geben Sie Folgendes in Ihr Feld ein~/.ssh/config
.Das habe ich in meinem
~/.ssh/config
.Um es für alle Hosts zu aktivieren, verwenden Sie:
Stellen Sie außerdem sicher
chmod 600 ~/.ssh/config
, dass Sie das Programm ausführen , da die Konfigurationsdatei nicht für die ganze Welt lesbar sein darf.quelle
~/.ssh/config
?Drücken Sie Enter, ~, .eine nach der anderen aus einem gefrorenen Sitzung zu trennen.
Der Abschnitt "ESCAPE CHARACTERS" in der SSH-Manpage erläutert die zugrunde liegenden Details.
quelle
EscapeChar ~
in auskommentieren müssen/etc/ssh/ssh_config
(oder~/.ssh/ssh_config
wenn Sie es vorziehen).EscapeChar ~
ist bereits die Standardeinstellung.Auch wenn dies keine direkte Antwort auf Ihre Frage ist, hängt es stark mit dem Problem zusammen, das Sie haben. Anstatt die Verbindung aufrecht zu erhalten (alle Verbindungen schließlich sterben) zu halten versuchen , können Sie Terminal - Multiplexern verwenden, wie
screen
undtmux
dass die Sitzung am Leben im Hintergrund halten , auch wenn Ihr Endgerät getrennt wird.Im Wesentlichen führen Sie beim Anmelden am SSH-Server sofort Folgendes aus,
screen
wodurch eine neue Sitzung erstellt und angehängt wird:Dann arbeiten Sie wie gewohnt mit der Shell. Wenn nun die Verbindung getrennt wird und Sie über SSH wieder online gehen und eine Verbindung zum Server herstellen können, erhalten Sie eine Liste der aktuellen Sitzungen mit:
So ordnen Sie eine Sitzung erneut zu:
wo
<session>
ist die PID oder ein Sitzungsname. Sie werden wieder mit Ihrer Sitzung verbunden und können dort weitermachen, wo Sie aufgehört haben!Sie können die Sitzung sogar trennen und die Verbindung von zu Hause aus wiederherstellen, um genau an dem Punkt fortzufahren, an dem Sie aufgehört haben. So trennen Sie die Sitzung, die Sie verwenden,
C-a
gefolgt vonC-d
(das istControl + A
und dannControl + D
).Es gibt auch ein einfaches Online-Tutorial .
Die Verwendung von
screen
undtmux
auf Remoteservern wird als bewährte Methode angesehen und dringend empfohlen . Einigescreen
Benutzer gehen so weit, dass sie als Standard-Anmeldeshell festgelegt sind. Wenn sie eine Verbindung herstellen, starten sie sofort eine neuescreen
Sitzung.quelle
Versuchen Sie
-o ServerAliveInterval=30
an Ihre Verbindungszeichenfolge anzuhängen (30
bedeutet 30 Sekunden und kann natürlich angepasst werden)quelle
Sie können auch ein Zeitlimit für Inaktivität auf der SSH-Serverseite festlegen:
Datei:
/etc/ssh/ssh_config
Inhalt:
Dies funktioniert genauso wie die Client-Einstellung, jedoch werden Null-Pakete nicht vom Client, sondern vom Server gesendet.
Herausgefiltert aus:
http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html
quelle
Für Menschen, die verhindern möchten, dass der Kunde eine Zeitüberschreitung erleidet.
Sie könnten versuchen,
ConnectTimeout 0
in der Konfigurationsdatei einzustellen . Der Wert 0 bedeutet, dass die Verbindung auf unbestimmte Zeit bestehen bleibt, sofern sie nicht geschlossen wird.Ihre Konfigurationsdatei (oder ssh_config) könnte folgendermaßen aussehen:
quelle