灰色的头像 發表於 2023-11-22 00:00:00

Linux ssh远程连接断开问题处理办法解决

<p>
        我们在通过远程连接操作Linux server的时候,有可能过一段时间忘记操作,便会发生ssh断开的问题。</p>
<p>
        而如果是本地的server,比较好办,直连设备kill掉ssh,踢掉无效用户连接,再次链接即可,但如果是远程server的话,那就比较麻烦。</p>
<p>
        而使用ssh连接远程服务器的时候,如果长时间没有操作,远程连接就有可能中断。正在执行的程序和vim等缓冲区数据都会丢失。</p>
<p>
        关于这个问题,下面有几种解决办法,供参考:</p>
<p>
        echo TMOUT=600 &gt;&gt; ~/.bashrc  或   echo TMOUT=600 &gt;&gt; /etc/profile    设置一个超时的秒数,600秒后终端上没有任何操作便自动断开连接。</p>
<p>
        或者 修改ssh客户端的配置:给/etc/ssh/ssh_config添加ServerAliveInterval 60</p>
<p>
        <span><strong>一.在Linux server去设置SSH保持连接时间:</strong></span></p>
<p>
        基于安全的理由,如果用户连线到 SSH Server 后闲置,SSH Server 会在超过特定时间后自动终止 SSH 连线。以下是设定终止连线时间的方法:</p>
<p>
        1、打开 /etc/ssh/sshd_config 文件,找到一个参数为 ClientAliveCountMax,它是设定用户端的 SSH 连线闲置多长时间后自动终止连线的数值,单位为分钟。</p>
<p>
        2、如果这一行最前面有#号,将那个#号删除,并修改想要的时间。</p>
<p>
        3、修改后保存并关闭文件,重新启动 sshd:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_626353">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">/etc/rc</code><code class="bash plain">.d</code><code class="bash plain">/init</code><code class="bash plain">.d</code><code class="bash plain">/sshd</code> <code class="bash plain">restart</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        4. vim .bash_profile</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_527622">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash functions">export</code> <code class="bash plain">TMOUT=1000000</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>二.保持ssh连接不断开</strong></span></p>
<p>
        用ssh连接服务端,一段时间不操作或屏幕没输出(比如复制文件)的时候,会自动断开</p>
<p>
        <strong>解决:(2种办法)</strong></p>
<p>
        <strong>1、在客户端配置</strong></p>
<p>
        #vi /etc/ssh/ssh_config(注意不是/etc/ssh/sshd_config文件),后面添加</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_676818">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">Host *</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">ServerAliveInterval 30</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        这表示要让所有的ssh连接自动加上此属性;如果要指定服务端,如下:</p>
<p>
        使用-o的参数ServerAliveInterval来设置一个防止超时的时间</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_546559">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash functions">ssh</code> <code class="bash plain">-o ServerAliveInterval=30 IP地址</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>2、在服务端配置</strong></p>
<p>
        编辑服务器 /etc/ssh/sshd_config,最后增加</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_884543">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">ClientAliveInterval 60</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">ClientAliveCountMax 1</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        这 样,SSH Server 每 60 秒就会自动发送一个信号给 Client,而等待 Client 回应</p>
<p>
        <span><strong>三.修改server和连接终端</strong></span></p>
<p>
        Linux系统server</p>
<p>
        在linux系统中使用ssh连接远程服务器时,可以使用-o的一个参数ServerAliveInterval来设置防止超时的时间。</p>
<p>
        比如:ssh -o serveraliveinterval=60 username@hostIP</p>
<p>
        服务器配置修改</p>
<p>
        修改ssh配置文件/etc/ssh/sshd_config,添加或者修改ClientAliveInterval为“ClientAliveInterval 60”。这个参数的是意思是每1分钟,服务器向客户端发一个消息,用于保持连接。保存后记得重启ssh服务。</p>
<p>
        修改过后,上面几个办法都可以让ssh保持连接,一直处于alive状态,不会因为没有操作而被服务器强制断线了。</p>
<p>
        终端:</p>
<p>
        使用SecureCRT连接远程服务器,在会话选项 -&gt; 终端设置中勾选“发送协议 NO-OP”。</p>
<p>
        使用putty连接远程服务器,找到Connection -&gt; Seconds between keepalives ( 0 to turn off ), 默认为0,改为60。</p>
<p>
        <img title="Linux ssh远程连接断开问题处理办法解决" alt="Linux ssh远程连接断开问题处理办法解决" src="https://zhuji.jb51.net/uploads/img/202305/7c77607ff00eccb0aebe2db2afe89a2b.jpg"></p>
<p>
        <span><strong>四.如何退出退出无响应的 SSH 连接</strong></span></p>
<p>
        有时候会发现 ssh 挂在那里没有响应了,可能是客户端的问题,也可能是服务器端的问题,也可能是客户端和服务器之间的网络问题;可能是客户端电脑休眠后连接断了、可能是网络断了、可能是 WiFi 信号不好、可能是网络延迟大了、可能是服务器挂了、也可能是服务器上的 sshd 进程挂了,…,可能是技术问题,也可能是非技术问题,可以找出无数可能。</p>
<p>
        有时我们离开办公桌前忘了退出 ssh 会话,或者工作的时候长时间 ssh 到服务器上忘记断开,之后发现那些没退出的 ssh 会话还挂在那里,无法退出、无法 Ctrl+C、无法做任何操作。通常我们就直接关闭 Terminal 后重新开一个新的;如果用的不是图形系统,没有窗口可以关闭,那还要启用另一个终端找到相关进程后 kill 掉。这里有一个小技巧,在那些没退出的 ssh 会话里用 ~. “优雅” 的断开连接。</p>
<p>
        可以这样操作:先 按“回车” 换行 再 按“shift + ` ”再按 “. ”</p>
<p>
        我们man 一下 ssh来看看:</p>
<p>
        <img title="Linux ssh远程连接断开问题处理办法解决" alt="Linux ssh远程连接断开问题处理办法解决" src="https://zhuji.jb51.net/uploads/img/202305/6fc2cd327297888cb169c6243eebf664.jpg"></p>
<p>
        其实Linux本身已经提供了很多便利的操作,只是我们需要多学习。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。</p>
<p>
        原文链接:http://www.cnblogs.com/haochuang/p/6182610.html</p>
頁: [1]
查看完整版本: Linux ssh远程连接断开问题处理办法解决