wom*_*ble 37
不,因为 SSH 无法知道您输入的内容是否需要按 Enter 键或 Tab 键才能执行操作——例如,如果您尝试查看命令历史记录,则^R不会发送 或向上箭头他们自己,那会……令人不快。
但是,您不必在每个字符之间等待它出现在屏幕上;如果你知道你必须输入什么,尽可能快地敲打它,终端会在你停止打字后的大约一个往返时间内赶上来,这与你离开时一样好无论如何都是行缓冲设置(丢包是不同的,但它引入了它自己有趣的怪癖)。
Ste*_*ell 36
Mosh旨在解决这个确切的问题。它设计用于高延迟和不可靠的连接,并提供本地回声和线路编辑。
Jef*_*and 29
PuTTY 提供了两个可能有用的功能:“本地回声”和“本地行编辑”。本地行编辑缓冲所有内容,仅在行返回后将其发送到服务器。这可以使命令行更容易处理,但也可能使使用文本编辑器变得地狱。
PuTTY 还有一些其他选项用于启用/禁用某些可能影响感知连接延迟的事物(Nagle 算法)。在我看来,OpenSSH 客户端并没有提供 PuTTY 在这方面所做的所有功能,而且我不知道可以比较的 Linux 替代方案。
否则,womble 是对的。
sna*_*nap 12
使用ssh host.example.org bash(或您想使用的任何外壳程序)打开 ssh 会话。
您将获得远程 shell 的行缓冲模式,这意味着您不会获得提示和行编辑,但您将获得本地回显和“一次一行”模式。有时在处理非常糟糕的连接时很有用。并非所有程序都能正常运行,因为您没有伪 tty,但大多数 UNIX 实用程序都可以正常工作。
更新:
使用上述技巧时,您可以使用名为rlfe的便捷包装程序在本地进行正常的行编辑(readline)。就跑。rlfe ssh host.example.org bash
遇到了同样的问题(由于某些位置的移动数据质量不佳而导致高延迟和数据包丢失),并且mosh没有为我剪掉它(它需要在所有远程主机上使用特殊程序,在所有服务器上本地和远程修复 UTF8 而不会破坏它们) ,修改所有防火墙 - 无论如何它并没有真正提供本地行编辑)我决定编写一个小包装器来为 ssh提供本地行编辑模式。
默认情况下,它只是在默认的逐字符模式下将所有内容传递给 ssh,但您可以随时按热键进入由 readline 驱动的本地行编辑模式。因此,您可以在本地输入(通过编辑、命令调用等)整行,然后当您按下Enter键时,它将作为一个 TCP 数据包发送到远程端。
优点是无延迟命令行编辑(如旧的 telnet 熟化/规范“逐行缓冲模式”,但具有由GNU readline提供的高级编辑命令)。此外,无需更改服务器或防火墙上的任何内容。编辑器和其他基于 curses 的程序在默认的逐字符模式下继续正常工作(尽管有延迟),就像在正常的 ssh 连接中一样。
缺点是你要么每次需要按热键进入本地线路编辑模式,要么你需要修改远程主机上的提示以允许自动检测。此外,远程选项卡文件名完成目前只能通过将您返回到逐个字符模式(或使用本地文件系统而不是远程文件系统,具体取决于您的偏好)来工作。不过,它正在进行中,因此欢迎提出请求或可行的改进想法!
优点不仅在于您的 shell(及其行编辑)是本地的且无延迟,而且您可以导航远程文件系统并对远程文件使用 shell 文件名补全(tab 键)。此外,(恕我直言,最佳功能)您可以使用您选择的本地编辑器进行远程文件的无延迟编辑。
缺点是(特别是如果你的链接也是低带宽的,不仅是高延迟),每个要编辑的文件,都需要完全传输到localhost,然后编辑完再完全传输到remote。SSHFS 确实提供了一些缓存(请参阅 sshfs(1) 选项cache、cache_timeout、cache_x_timeout)以在一定程度上缓解该问题。此外,如果您想在远程执行某些操作,您需要使用另一个屏幕或在所有命令前加上“ ssh remotehost ”(例如ssh remotehost sudo service apache restart)。见选项ControlMaster在ssh_config中(5) ,使更快执行(和无密码提示)。