有没有办法避免SSHinput延迟?

我可以告诉SSH发送数据只有按下input或选项卡后,而不是每个单独的按键后?

不,因为SSH无法知道你input的内容是否需要input或选项卡才能执行 – 例如,如果你正在尝试查看命令历史logging,那么^R或向上箭头将不会自己发送,那将是……不愉快的。

尽pipe如此,您不必在每个angular色之间等待它出现在屏幕上。 如果你知道你要input什么,就尽可能快地打开它,terminal将在你停止input的时间内返回一个回合时间,这个时间与你将要输出的时间差不多无论如何,一个线路缓冲设置(丢包是不同的,但它引入了它自己有趣的怪癖)。

PuTTY提供了两个可用的function:“本地回显”和“本地行编辑”。 本地行编辑缓冲所有内容,只在线返回后将其发送到服务器。 这可以使命令行更容易处理,但它也可能使使用文本编辑器地狱。

PuTTY还有一些其他选项可用来启用/禁用某些可能影响感知连接延迟的事件(Naglealgorithm)。 正如我所看到的,OpenSSH客户端并不提供PuTTY在这方面所做的所有function,而且我不知道可以比较的Linux备选scheme。

否则,womble是正确的。

Mosh被devise来解决这个确切的问题。 它被devise用于高延迟和不可靠的连接,并提供本地回声和线路编辑。

ssh host.example.org bash (或任何你想使用的shell)打开ssh会话。

你会得到线路缓冲模式到远程shell,这意味着你不会得到一个提示和行编辑,但你会得到本地回声和“一次一行”模式。 在处理非常糟糕的连接时,它有时非常有用。 并不是所有的程序都能正常运行,因为你不会有伪tty,但是大部分的UNIX工具都能正常工作。

更新:

当使用上面的技巧时,你可以使用一个叫做rlfe的方便包装程序在本地进行正常的行编辑( readline )。 运行rlfe ssh host.example.org bash

有同样的问题( 由于在某些地点的移动数据质量可怕的高延迟和数据包丢失 ),并没有为我削减它(它需要在所有远程主机上的特殊程序,固定UTF8本地和远程的所有服务器,而不打破他们,修改所有的防火墙 – 它并不真正提供本地行编辑)我已经决定写一个小包装提供本地线路编辑模式的SSH 。

默认情况下,它只是将所有内容都传递给ssh,默认为char-by-char模式,但是您可以按热键随时进入readline-powered本地行编辑模式。 所以你可以在本地input(带编辑,命令调用等)整行,然后当你按下回车键时,它将作为一个TCP数据包发送到远端。

好处是无延迟的命令行编辑(像旧的telnet熟化/规范“逐行缓冲模式”,但GNU readline提供了出众的编辑命令)。 而且,在服务器或防火墙上不需要任何改变。 编辑器和其他基于curses的程序在正常的ssh连接中以默认逐字符模式继续正常工作(虽然有滞后)。

缺点是您需要按热键进入本地线路编辑模式,或者您需要修改远程主机上的提示以允许自动检测。 此外,远程选项卡文件名的完成目前只能通过将您逐渐丢弃到char-by-char模式(或者使用本地文件系统而不是远程文件系统,这取决于您的首选项)。 这是正在进行的工作,所以拉请求或可行的想法改进是值得欢迎的!


在非传统方面,您可以使用SSHFS在本地安装远程文件系统。

这样做的好处不仅在于你的shell(和它的行编辑)是本地的,而且是无滞后的,而且你可以导航远程文件系统,并且使用shell文件完成( tab键 )来处理远程文件。 另外,(最好的function恕我直言)你可以使用你的本地编辑器select无延迟的编辑远程文件。

缺点是(特别是链接也是低带宽,不仅是高延迟),对于每个要编辑的文件,都需要完全转移到本地主机,然后在编辑完成后,再次完全转移到远程。 SSHFS提供了一些caching(参见sshfs(1)options cachecache_timeoutcache_x_timeout )来缓解这个问题。 另外,如果你想在远程执行一些东西,你需要使用另一个屏幕或者用“ ssh remotehost ”(例如ssh remotehost sudo service apache restart )来加上前缀。 请参阅ssh_config(5)中的 ControlMaster选项,以便更快地执行(并且不需要密码提示)。

如果你只是在运行命令,你可以模拟这种行为,

ssh user @ targetmachine'我的命令在一个string'

但,

  1. 这增加了创build连接的延迟(可以使用主/共享ssh连接来缓解)
  2. 如果你没有一个无密码的私钥,你将不得不使用ssh-agent或者input密码
  3. 显然,如果您正在与菜单或编辑文件进行交互,则不起作用

这是你想要的。 您需要同时安装客户端和服务器,而OpenSSH上游从未采用这些更改。 https://github.com/hyc/OpenSSH-LINEMODE