Frage Gibt es eine Möglichkeit, SSH-Tippverzögerung zu vermeiden?


Kann ich SSH mitteilen, dass die Daten erst nach dem Drücken der Enter- oder Tab-Taste gesendet werden sollen und nicht nach jedem einzelnen Tastendruck?


38
2017-08-18 11:41


Ursprung


Ich bin sehr interessiert, wo Sie so eine Tippverzögerung haben, dass Sie damit nicht arbeiten können. Ich habe ssh im Modem-Zeitalter benutzt und bin nie auf diese Probleme gestoßen. - mailq
Ich greife auf einen SliceHost VPS (USA) aus Belgien zu. Die Verzögerung ist bemerkenswert genug, um mich zu verwirren. Ich habe jedoch bemerkt, dass andere Leute weniger davon betroffen sind als ich. - StackedCrooked
mosh.mit.edu - alfC


Antworten:


Nein, weil SSH nicht wissen kann, ob das, was Sie eingeben, eine Eingabe oder einen Tab für die Aktion erfordert - wenn Sie versuchen, Ihre Befehlsgeschichte zu durchlaufen, z ^R oder Pfeile nach oben würden nicht von selbst gesendet, und das wäre ... unangenehm.

Sie müssen nicht zwischen jedem Zeichen warten, bis es auf dem Bildschirm erscheint. Wenn Sie wissen, was Sie tippen müssen, versuchen Sie es so schnell wie Sie möchten, und das Terminal holt in etwa einer Hin- und Rückfahrt nach dem Tippen auf, was ungefähr so ​​gut ist, wie Sie aussteigen werden eine Leitung gepuffert Setup sowieso (Paketverlust ist anders, aber es führt seine eigenen interessanten Macken).


28
2017-08-18 11:48



Ich wäre wirklich daran interessiert, einen Weg zu finden, die ssh-typing-Geschwindigkeit über mehrere Maschinen hinweg zu messen. Ich habe beobachtet, dass die Geschwindigkeit variieren kann zwischen Maschinen an der gleichen Stelle und die keine schwere Last auf sie haben. Meine Theorie ist, dass dies vor allem mit den kleinen Instanzen von AWS geschieht (wie Mikro- oder Mini-Instanzen). - sorin
Schau dir das Mosh-Papier an. Der Autor hat ein Benchmarking durchgeführt mosh.org/#techinfo - user7610


PuTTY bietet zwei nützliche Funktionen: "local echo" und "local line editing". Die Bearbeitung der lokalen Zeile puffert alles und sendet es erst nach einer Zeilenrückgabe an den Server. Das kann die Befehlszeile viel einfacher handhaben, aber es kann auch die Verwendung eines Texteditors zur Hölle machen.

PuTTY hat auch einige andere Optionen zum Aktivieren / Deaktivieren bestimmter Dinge (Nagles Algorithmus), die die wahrgenommene Verbindungslatenz beeinflussen können. Aus meiner Sicht bietet der OpenSSH-Client nicht alle Funktionen, die PuTTY in dieser Hinsicht bietet, und ich kenne keine vergleichbare Linux-Alternative.

Sonst hat Womble es richtig gemacht.


20
2017-08-18 13:36





Mosh wurde entwickelt, um genau dieses Problem anzugehen. Es wurde für die Verwendung bei Verbindungen mit hoher Latenz und unzuverlässiger Verbindung entwickelt und bietet eine lokale Echo- und Zeilenbearbeitung.


17
2017-07-04 01:01



Sie können es in einem lokalen Verzeichnis von der Quelle ohne sudo installieren. Schau auch auf mosh.org. Er sagt: "Kein privilegierter Code. Kein Daemon. Sie müssen nicht der Superuser sein, um Mosh zu installieren oder auszuführen. Der Client und der Server sind ausführbare Dateien, die von einem normalen Benutzer ausgeführt werden und nur für die Dauer der Verbindung bestehen." - Steven C. Howell
Nur um zu bemerken. Mosh ist nicht SSH. Es verwendet ein eigenes proprietäres Protokoll. (Ich habe damit aber kein Problem.) - user7610
Dies funktionierte von Grund auf für mich auf Android und Home Bad Wifi-Netzwerk. Es kennt die Readline - tinmarino


Öffnen Sie die SSH-Sitzung mit ssh host.example.org bash (oder welche Shell Sie verwenden möchten).

Sie erhalten den Line-gepufferten Modus für die Remote-Shell, was bedeutet, dass Sie keine Eingabeaufforderung und Zeilenbearbeitung erhalten, aber Sie erhalten lokales Echo und "eine Zeile zu einer Zeit" -Modus. Es ist manchmal nützlich, wenn Sie mit einer sehr schlechten Verbindung arbeiten. Nicht alle Programme werden ordnungsgemäß ausgeführt, da Sie keine Pseudo-Tty haben, aber die meisten UNIX-Dienstprogramme funktionieren einwandfrei.

Aktualisieren:

Wenn Sie den obigen Trick verwenden, können Sie normale Zeilenbearbeitung (Zeile lesen) Bei der lokal Ende mit einem praktischen Wrapper-Programm namens Rlfe. Renn einfach rlfe ssh host.example.org bash.


8
2017-08-18 17:18



Ich habe es versucht und fand es nicht sehr praktikabel. Aber es ist cool zu wissen, danke. - StackedCrooked
das funktioniert wunderbar für mich. - lakesare


Das gleiche Problem gehabt zu haben (Hohe Latenz und Paketverlust aufgrund schlechter Datenqualität an einigen Orten) und Mosh nicht schneiden für mich (es benötigt spezielle Programme auf allen Remote-Hosts, Fix UTF8 lokal und remote auf allen Servern, ohne sie zu brechen, alle Firewalls ändern - und es bietet nicht wirklich lokale Zeilenbearbeitung sowieso) Ich habe beschlossen zu schreiben ein kleiner Wrapper zu bieten Bearbeitungsmodus für lokale Linien für ssh.

Standardmäßig übergibt es im standardmäßigen char-by-char-Modus einfach alles an ssh, aber Sie können jederzeit einen Hotkey drücken, um in den readline-betriebenen lokalen Zeilenbearbeitungsmodus zu wechseln. So können Sie die ganze Zeile lokal (und mit Bearbeiten, Befehlsabruf usw.) eingeben und dann drücken, wenn Sie drücken eingeben es wird als ein TCP-Paket zur entfernten Seite gesendet.

Vorteil ist die verzögerungsfreie Befehlszeilenbearbeitung (wie der alte telnet-gekochte / kanonische "zeilenweise gepufferte Modus"), aber mit überlegenen Bearbeitungsbefehlen, die von GNU Readline). Außerdem muss auf Servern oder Firewalls nichts geändert werden. Und Editoren und andere Programme, die auf Flüche basieren, funktionieren weiterhin normal (wenn auch mit Verzögerung) im Standardmodus char-by-char wie in normaler ssh-Verbindung.

Nachteil ist, dass Sie entweder die Hotkey-Taste drücken müssen, um den Bearbeitungsmodus für die lokale Zeile jedes Mal zu aktivieren, oder Sie die Eingabeaufforderung auf dem Remote-Host ändern müssen, um die automatische Erkennung zu ermöglichen. Auch, entfernt Tab Das Vervollständigen von Dateinamen funktioniert derzeit nur, indem Sie zurück in den char-by-char-Modus versetzt werden (oder abhängig von Ihren Voreinstellungen ein lokales Dateisystem anstelle eines entfernten). Es ist jedoch in Arbeit, also sind Pull-Anfragen oder praktikable Ideen für Verbesserungen willkommen!


Auf die unkonventionelle Seite könnte man alternativ zurückgreifen SSHFS Remote-Dateisystem lokal mounten.

Der Vorteil liegt nicht nur darin, dass Ihre Shell (und ihre Zeilenbearbeitung) lokal und verzögerungsfrei ist, sondern auch, dass Sie durch das entfernte Dateisystem navigieren und die Shell-Dateiname vervollständigen können (Tab-Taste) für entfernte Dateien. Außerdem, (das beste Feature IMHO) können Sie Ihren lokalen Editor der Wahl für die verzögerungsfreie Bearbeitung von Remote-Dateien verwenden.

Nachteile sind (besonders wenn Sie eine Verbindung mit niedriger Bandbreite und nicht nur hoher Latenz haben), dass für jede Datei, die bearbeitet werden soll, diese vollständig an localhost übertragen und dann nach der Bearbeitung vollständig wieder an die entfernte übertragen werden muss. SSHFS bietet etwas Caching (siehe sshfs (1) -Optionen) Zwischenspeicher, cache_timeout, cache_x_timeout) um diese Probleme etwas zu mildern. Wenn Sie etwas auf der Fernbedienung ausführen möchten, müssen Sie einen anderen Bildschirm verwenden oder alle Befehle mit "ssh Remotehost" (zum Beispiel ssh remotehost sudo service apache restart). Siehe Option ControlMaster im ssh_config (5) um das schneller auszuführen (und ohne Passwortaufforderung).


5
2017-09-16 19:34





Sie können dieses Verhalten emulieren, wenn Sie nur Befehle ausführen,

ssh user @ targetmachine 'meine Befehle in einer Zeichenfolge'

aber,

  1. Dies fügt eine zusätzliche Verzögerung beim Erstellen der Verbindung hinzu (kann mit Master / Shared SSH-Verbindungen)
  2. Wenn Sie keinen privaten Schlüssel ohne Passwort haben, müssen Sie ihn verwenden ssh-agent oder gib das Passwort ein
  3. Natürlich funktioniert es nicht, wenn Sie mit Menüs interagieren oder Dateien bearbeiten usw.

2
2017-08-18 12:48





Sie können tmux verwenden, um ein flüssiges Echo Ihrer Eingabe zu erzielen. Führen Sie tmux lokal aus. Wenn Sie die SSH-Shell in einem Bereich und eine lokale Shell in einem Bereich darunter haben, können Sie vom lokalen Bereich aus Schlüssel an den Remote-Bereich senden.

tmux send-keys -t top 'ls' C-m

Interaktive Befehle und kleine Befehle tippe ich direkt in die verzögerte SSH-Shell. Sobald die Verzögerung meine Eingabe behindert, wechsle ich in den lokalen Bereich und verwende send-keys. Dies funktioniert sogar während der Eingabe eines Befehls.

Um es zu verkürzen, habe ich das zu meinem .bashrc hinzugefügt

function ts {
    args=$@
    tmux send-keys -t right "$args" C-m
}

Danke an Christian Pelczarski für die Erklärung der send-keys: https://minimul.com/increased-developer-productivity-with-tmux-part-5.html

Sie müssen beispielsweise bei der Verwendung von Anführungszeichen fliehen

ts git config --global alias.lola \'log --graph --decorate --pretty=oneline --abbrev-commit --all\'

1
2017-07-19 07:35





Das macht was du willst. Sie müssen jedoch sowohl den Client als auch den Server installieren, und der OpenSSH-Upstream hat die Änderungen nie übernommen. https://github.com/hyc/OpenSSH-LINEMODE


0
2017-08-09 19:03