有没有办法连接到一个SSH连接断开? 我们的networking连接到我们正在单独工作的远程站点时遇到问题; 然而,与此同时,由于在连接到远程位置的服务器时丢失了数据包,我们经历了大量的断开连接。 很多时候会话保持活动一段时间,有时恰好是在某些动作(文件编辑,运行一些进程等)的过程中,我需要回到,而不是重新启动,如果可能的话。
更新:对于一个实际的答案见下面的zero_r的答案
这不是一个答案,而是一个解决方法。 使用屏幕 。
当你第一次login,运行屏幕。 你得到另一个shell,运行命令。 如果断开连接,屏幕进程会使terminal处于活动状态,以便您的shell及其运行的进程不会翻倒。 重新连接时,运行“screen -r”恢复。
还有一些configuration和使用屏幕,但上述应该解决您的问题。
尝试将ClientAliveInterval(例如60)和TCPKeepAlive(yes或no)设置为服务器端sshd.conf中的适当值。
这应该保持您的会话活着,即使连接丢失了几分钟。
如上所述, GNU屏幕是要走的路。 它将允许你在远程盒上有一个“屏幕会话”,你可以通过多个“屏幕窗口”运行多个命令。 如果您的父母SSH连接死亡,这将简单地分离,保持所有子stream程在其中运行。
' man screen
'和往常一样是你的朋友,如果没有默认安装,OS包应该叫' screen
'。
基础是:
开始一个屏幕会话(在您的远程主机上):
$ screen
断开您的屏幕会话: CTRL-A , d
重新login后重新连接到屏幕会话:
$ screen -d -r
打开另一个屏幕“窗口”: CTRL-A , c
循环通过你打开屏幕窗口: CTRL-A , 空间
屏幕上有很多很酷的东西。 我已经使用了10多年了,现在还在发现新function。 这是我最喜欢的Unix工具。
我不敢相信没有人提到MOSH ,
Mosh是一个独立的协议,可以挂钩到SSHlogin过程中,它可以让你的会话在断开连接之后保持活着状态,改变IP,高延迟等等。 它在主页上的解释比我可以解释,所以我已经复制下面的描述。 我的经验和build议是,我在Android手机上使用它,这是旅行和SSH'ing时节省生命。 例如,当我的笔记本电脑与列车上的移动电话连接时,情况也是如此。 我build议从源代码编译得到最新版本,Ubuntu里面的repo版本有一些烦人的地方,在最新版本(写作的时候)是固定的。
Mosh(手机壳)
允许漫游的远程terminal应用程序,支持间歇连接,并提供智能本地回声和用户击键的行编辑。
Mosh是SSH的替代品。 它更加健壮和响应,尤其是在Wi-Fi,蜂窝和长途链路上。
Mosh是免费软件,可用于GNU / Linux,FreeBSD,Solaris,Mac OS X和Android。
网站的function:
更改IP。 保持联系 :当您在互联网连接之间移动时,Mosh会自动漫游。 在火车上使用Wi-Fi,在酒店使用以太网,在沙滩上使用LTE:您将保持login状态。大多数networking程序在漫游后都会丢失连接,包括SSH和Web应用程序(如Gmail)。 Mosh是不同的。
为了美梦 :随着Mosh,你可以把你的笔记本电脑睡觉,稍后唤醒,保持你的连接完好无损。 如果您的互联网连接断开,Mosh会警告您 – 但在networking服务恢复时,连接将恢复。
摆脱networking滞后 :在等待服务器回复之前,SSH显示你自己的input。 这可能会导致糟糕的用户界面。 Mosh不同:它可以立即响应打字,删除和行编辑。 它可以自适应地运行,甚至可以在emacs和vim等全屏程序中运行。 在一个不好的联系上,突出的预测是强调的,所以你不会被误导。
没有特权的代码。 没有守护进程 :你不需要成为超级用户来安装或运行Mosh。 客户端和服务器是由普通用户运行的可执行文件,并且仅在连接的生命周期中持续。
同样的login方法 :Mosh不会侦听networking端口或validation用户。 mosh客户端通过SSHlogin到服务器,并且用户像以前一样呈现相同的凭证(例如密码,公钥)。 然后Mosh远程运行mosh-server并通过UDP连接到它。
在你的terminal内运行,但更好 :Mosh是一个命令行程序,像ssh。 你可以在xterm,gnome-terminal,urxvt,Terminal.app,iTerm,emacs,screen或者tmux中使用它。 但是mosh是从零开始devise的,只支持一个字符集:UTF-8。 它修复了其他terminal和SSH中的Unicode错误。
Control-C很好用 :与SSH不同,mosh的基于UDP的协议可以很好地处理丢包,并根据networking条件设置帧速率。 Mosh不填满networking缓冲区,所以Control-C
总是努力阻止失控的过程。
autossh会监视您的连接,如果连接断开,它会重新连接。 这比keepalives更可靠。 如果连接到屏幕会话,您将从断开连接的位置继续(请参阅rscreen
附带的rscreen
)
我会安装并启动屏幕来解决您的问题。 屏幕将让您重新连接到以前的屏幕会话。
除此之外,屏幕也让你做很酷的事情,如拆分屏幕,查看控制台等。您可以在这里和这里find更多的信息。
对于初学者,如果你断开连接,你可以使用
screen -ls
查看您的会话和
screen -r ${session}
重新连接到一个断开连接。
这是一个经典的。 每当你冒着失去连接terminal的风险时使用它。
$ tmux $ sh do_something_that_takes_forever !! Connection fails so you reconnect once you notice $ tmux ls 0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30] $ tmux attach -t 0
就这样,你又回来了
正如其他人所指出的,屏幕通常是最好的解决scheme,它也增加了许多其他有用的function。
您可以在远程机器上设置您的configuration文件,以便在login时自动启动和/或重新连接到屏幕上,这样可以避免因为连接断开而忘记一次启动屏幕。
请参阅http://tlug.dnho.net/?q=node/239 (或者以不同的方式在Google上search许多其他示例)。
一个更现代的屏幕替代,唉一些types的“虚拟化”不可用(例如在cygwin你可以有“屏幕”,但不是因为它的devise方式“tmux”),但无论你有select安装tmux ,我强烈build议去那个屏幕。
这是另一个非屏幕解决scheme。
油灰托盘允许你做到这一点,它有一个断开的重新连接选项,不正常或腻子
https://puttytray.goeswhere.com/
这是一个腻子与其他选项叉,去连接设置,有2个选项,一个“试图重新连接失败”,并试图重新启动连接。
虽然屏幕会保持你的shell会话在远程服务器上打开,如果你的SSH会话下降,它不会做任何关于ssh连接被丢弃的问题。 正如zero_rbuild议的,尝试调整你的SSH连接,保持活力和超时。
我build议你找出导致问题的丢失数据包的原因,并解决它,而不是解决它。