web-dev-qa-db-fra.com

Existe-t-il un moyen d'éviter le retard de frappe SSH?

Puis-je dire à SSH d'envoyer les données uniquement après avoir appuyé sur Entrée ou Tab, et non après chaque touche individuelle?

48
StackedCrooked

Non, car SSH n'a aucun moyen de savoir si ce que vous tapez nécessiterait une entrée ou un onglet pour agir - si vous essayez de parcourir l'historique de vos commandes, par exemple, le ^R ou des flèches vers le haut ne seraient pas envoyées par elles-mêmes, et ce serait ... désagréable.

Vous n'avez pas besoin d'attendre entre chaque personnage pour qu'il apparaisse à l'écran; si vous savez ce que vous devez taper, frappez-le aussi vite que vous le souhaitez, et le terminal rattrapera environ un aller-retour à partir du moment où vous avez arrêté de taper, ce qui est à peu près aussi bon que vous en sortirez. une configuration en ligne de toute façon (la perte de paquets est différente, mais elle présente ses propres bizarreries intéressantes).

33
womble

Mosh a été conçu pour résoudre ce problème précis. Il est conçu pour être utilisé sur des connexions à latence élevée et peu fiables, et fournit un écho local et une modification de ligne.

30
Steven C. Howell

PuTTY propose deux fonctionnalités qui peuvent être utiles: "écho local" et "édition de ligne locale". L'édition de ligne locale met tout en mémoire tampon et ne l'envoie au serveur qu'après un retour de ligne. Cela peut rendre la ligne de commande beaucoup plus facile à gérer, mais cela peut également rendre l'enfer d'un éditeur de texte.

PuTTY a également d'autres options pour activer/désactiver certaines choses (algorithme de Nagle) qui peuvent affecter la latence de connexion perçue. Selon moi, le client OpenSSH n'offre pas toutes les fonctionnalités de PuTTY à cet égard, et je ne connais pas d'alternative Linux comparable.

Sinon, womble a raison.

26
Jeff Ferland

Ouvrez la session ssh avec ssh Host.example.org bash (ou tout autre Shell que vous souhaitez utiliser).

Vous obtiendrez le mode de mise en mémoire tampon de ligne vers le shell distant, ce qui signifie que vous n'obtiendrez pas d'invite et de modification de ligne, mais vous obtiendrez un écho local et un mode "une ligne à la fois". Il est parfois utile lorsque vous travaillez avec une très mauvaise connexion. Tous les programmes ne fonctionneront pas correctement car vous n'aurez pas de pseudo-tty mais la plupart des utilitaires UNIX fonctionnent très bien.

Mise à jour:

Lorsque vous utilisez l'astuce ci-dessus, vous pouvez obtenir une édition de ligne normale ( readline ) à la fin locale en utilisant un programme wrapper pratique appelé rlfe . Exécutez simplement rlfe ssh Host.example.org bash.

10
snap

Vous pouvez émuler ce comportement si vous exécutez simplement des commandes en faisant,

ssh user @ targetmachine 'mes commandes dans une chaîne'

mais,

  1. cela ajoute un délai supplémentaire dans la création de la connexion (peut être atténué en utilisant connexions ssh maître/partagées )
  2. si vous n'avez pas de clé privée sans mot de passe, vous devrez utiliser ssh-agent ou saisissez le mot de passe
  3. il est clair que cela ne fonctionne pas si vous interagissez avec des menus ou modifiez des fichiers, etc.
3
EightBitTony

Cela fait ce que vous voulez. Vous devez cependant installer le client et le serveur, et OpenSSH en amont n'a jamais adopté les modifications. https://github.com/hyc/OpenSSH-LINEMODE

1
hyc

Vous pouvez utiliser tmux pour obtenir un écho fluide de votre frappe. Exécutez tmux localement. Si vous avez le shell ssh dans un volet et un shell local dans un volet en dessous, vous pouvez envoyer des clés au volet distant à partir du volet local.

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

Commandes interactives et petites commandes que je tape directement dans le shell ssh en retard. Dès que le décalage commence à gêner ma frappe, je passe au volet local et j'utilise des touches d'envoi. Cela fonctionne même au milieu de la saisie d'une commande.

Pour le raccourcir, je l'ai ajouté à mon .bashrc

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

Merci à Christian Pelczarski d'avoir expliqué les clés d'envoi: https://minimul.com/increased-developer-productivity-with-tmux-part-5.html

Vous devrez vous échapper lors de l'utilisation de guillemets, par exemple

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