有没有办法连接到已断开的ssh会话?我们与单独处理的远程站点的网络连接出现问题;但是,与此同时,在连接到远程位置的服务器时,由于丢失数据包,我们会遇到大量断开连接的情况。很多时候,该会话会保持活动状态一段时间,有时它恰好是我需要返回的某个动作(文件编辑,运行某些进程等)的中间,而不是尽可能重新启动。
有没有办法连接到已断开的ssh会话?我们与单独处理的远程站点的网络连接出现问题;但是,与此同时,在连接到远程位置的服务器时,由于丢失数据包,我们会遇到大量断开连接的情况。很多时候,该会话会保持活动状态一段时间,有时它恰好是我需要返回的某个动作(文件编辑,运行某些进程等)的中间,而不是尽可能重新启动。
Answers:
更新:有关实际答案,请参见下面的zero_r答案
这不是答案,而是一种解决方法。使用屏幕。
首次登录时,运行屏幕。您得到另一个外壳,在其中运行命令。如果断开连接,则屏幕进程将使终端保持活动状态,以使您的shell及其正在运行的进程不会崩溃。重新连接时,运行“ screen -r”以继续。
还有很多配置和使用屏幕的方法,但是以上方法可以解决您的问题。
screen
我的Ubuntu 12.x已经安装了该命令,因此,如果您不确定只是尝试使用此命令,它将重新连接并恢复do-release-upgrade过程:sudo screen -D -r
sudo
仅当原始屏幕会话是使用sudo启动时才应使用。否则,它将返回,就好像没有任何屏幕会话一样:There is no screen to be detached
screen -r
这正是我想要的。
尝试在服务器端sshd.conf上将ClientAliveInterval(例如60)和TCPKeepAlive(是或否)设置为适当的值。
即使连接断开了几分钟,这也应该使会话保持活动状态。
如上所述,GNU Screen是必经之路。它将允许您在远程框中进行“屏幕会话”,您可以通过多个“屏幕窗口”在其中运行多个命令。如果您的父SSH连接断开,这将简单地断开,使其中运行的所有子进程保持良好状态。
“ man screen
”和往常一样是您的朋友,screen
如果默认情况下未安装OS软件包,则应将其称为“ ”。
基础是:
启动屏幕会话(在远程主机上):
$ screen
断开与屏幕会话的连接:CTRL-A,d
重新登录后重新连接到屏幕会话:
$ screen -d -r
打开另一个屏幕“窗口”: CTRL-A,c
通过您打开纱窗周期:CTRL-A,space
Screen 有很多很酷的功能。我使用它已有10多年了,但仍在寻找新功能。这是我最喜欢的Unix实用程序。
我不敢相信没有人提到MOSH;
Mosh是一个单独的协议,可以连接到SSH登录过程,在断开连接,更改IP,高延迟等天后,它可使会话保持活动状态。在主页上对它的解释比我能解释的要好,因此,我复制了下面的描述。我的经验和建议是,我可以在Android手机上使用它,在旅行和SSH's时可以节省生命。例如,在火车上将手机与手机捆绑在一起时,在笔记本电脑上也是如此。我建议从源代码进行编译以获取最新版本,Ubuntu内部的repo版本在其中存在一些烦人之处,这些烦恼已在最新版本中得到解决(在撰写本文时)。
莫什(手机壳)
允许漫游,支持间歇性连接并提供智能本地回显和用户击键的行编辑的远程终端应用程序。
Mosh替代了SSH。它更加健壮和响应迅速,尤其是在Wi-Fi,蜂窝和长途链路上。
Mosh是免费软件,可用于GNU / Linux,FreeBSD,Solaris,Mac OS X和Android。
网站功能:
更改IP。保持连接状态:当您在Internet连接之间移动时,Mosh会自动漫游。在火车上使用Wi-Fi,在酒店使用以太网,在海滩上使用LTE:您将保持登录状态。漫游后,大多数网络程序都会失去连接,包括SSH和Web应用程序(例如Gmail)。莫什与众不同。
美梦成真:借助Mosh,您可以让笔记本电脑进入睡眠状态,然后将其唤醒,以保持连接状态不变。如果您的Internet连接断开,Mosh会警告您-但是当网络服务恢复时,连接会恢复。
摆脱网络延迟:SSH等待服务器的答复,然后显示您自己的键入内容。这可能会导致糟糕的用户界面。Mosh与众不同:它可以立即响应键入,删除和行编辑。它可以自适应地做到这一点,甚至可以在全屏程序(例如emacs和vim)中使用。如果连接不好,则会突出显示出色的预测,因此您不会被误导。
没有特权代码。No daemon:您无需成为超级用户即可安装或运行Mosh。客户端和服务器是由普通用户运行的可执行文件,仅在连接有效期内有效。
相同的登录方法:Mosh不会监听网络端口或验证用户身份。Mosh客户端通过SSH登录到服务器,并且用户提供与以前相同的凭据(例如,密码,公钥)。然后,Mosh远程运行mosh服务器,并通过UDP连接到它。
在终端中运行,但效果更好:Mosh是一个命令行程序,如ssh。您可以在xterm,gnome-terminal,urxvt,Terminal.app,iTerm,emacs,screen或tmux中使用它。但是mosh是从头开始设计的,仅支持一种字符集:UTF-8。它修复了其他终端和SSH中的Unicode错误。
Control-C的工作原理非常好:与SSH不同,mosh的基于UDP的协议可以优雅地处理数据包丢失,并根据网络状况设置帧速率。Mosh不会填满网络缓冲区,因此Control-C
始终可以终止失控的进程。
autossh监视您的连接,如果连接断开,它将重新连接。它比keepalive更可靠。如果您连接到屏幕会话,则将从断开的位置继续(请参见rscreen
autossh附带的内容)
rscreen
为此。
正如其他人指出的那样,屏幕通常是最好的解决方案,并且它还添加了许多其他有用的功能。
您可以在远程计算机上将您的配置文件设置为在登录时自动启动和/或重新连接到屏幕,这样可以避免由于连接断开而忘记了在需要时一次启动屏幕的情况。
参见http://tlug.dnho.net/?q=node/239(或在Google上搜索许多其他示例,它们的方式稍有不同)。
这是另一个非屏幕解决方案。
腻子托盘允许您执行此操作,它具有“断开连接时重新连接”选项,该选项不是常规的或腻子
https://puttytray.goeswhere.com/
它是腻子的一个(完全开源的)叉子,带有其他选项,进入连接设置,并且有2个选项,一个用于“尝试在连接失败时重新连接”和“尝试在启动时重新连接”。
如果ssh会话断开,屏幕将使您的Shell会话在远程服务器上保持打开状态,但它对于ssh连接断开的问题没有任何帮助。正如zero_r所建议的那样,请尝试通过保持活动和长时间超时来调整ssh连接。
我建议您跟踪导致问题的数据包丢失的原因,并解决该问题,而不要解决它。