<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Linux on FelixHao&#39;s Blog</title>
        <link>https://www.autmaple.com/tags/linux/</link>
        <description>Recent content in Linux on FelixHao&#39;s Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Thu, 26 Jun 2025 12:46:39 +0800</lastBuildDate><atom:link href="https://www.autmaple.com/tags/linux/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>SSH客户端在一段时间之后卡死</title>
        <link>https://www.autmaple.com/post/ssh-client-freezes-after-a-period-of-time/</link>
        <pubDate>Thu, 26 Jun 2025 12:46:39 +0800</pubDate>
        
        <guid>https://www.autmaple.com/post/ssh-client-freezes-after-a-period-of-time/</guid>
        <description>&lt;h2 id=&#34;问题描述&#34;&gt;问题描述
&lt;/h2&gt;&lt;p&gt;使用 SSH 连接远程服务器，长时间没有输入任何命令后，客户端输入命令经常出现无响应、假死的现象。&lt;/p&gt;
&lt;h2 id=&#34;原因分析&#34;&gt;原因分析
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;连接链路上的网络设备为了节省网络资源，主动断开了 TCP 连接。具体来说，网络设备维护了一张 &lt;code&gt;连接状态表&lt;/code&gt;, 为了避免 &lt;code&gt;连接状态表&lt;/code&gt; 存放大量无效的连接，设置了超时机制。如果在规定时间内连接没有传输任何数据包，就认为该连接无效，从而断开对应的连接。&lt;/li&gt;
&lt;li&gt;客户端不知道连接已经断开，继续保持 &lt;code&gt;连接中&lt;/code&gt; 的状态&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;解决方案&#34;&gt;解决方案
&lt;/h2&gt;&lt;p&gt;有两种解决方案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;修改客户端的 SSH 配置(推荐)&lt;/li&gt;
&lt;li&gt;修改服务端的 SSH 配置(需要服务器权限)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;修改客户端的-ssh-配置&#34;&gt;修改客户端的 SSH 配置
&lt;/h3&gt;&lt;p&gt;修改客户端的 SSH 配置无需服务器权限，操作简单，修改完后立即生效，推荐使用。操作如下：&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;~/.ssh/config&lt;/code&gt; 文件中新增如下的内容:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Host * &lt;span class=&#34;c1&#34;&gt;# `*` 表示对所有的服务器使用下方的配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	ServerAliveInterval &lt;span class=&#34;m&#34;&gt;60&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 每隔 60s 向服务器发送一次心跳包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	ServerAliveCountMax &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 服务器连续 3 次未响应心跳包则主动断开连接&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;修改服务器的-ssh-配置&#34;&gt;修改服务器的 SSH 配置
&lt;/h3&gt;&lt;p&gt;编辑 &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; 文件，在文件中新增如下的内容：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ClientAliveInterval &lt;span class=&#34;m&#34;&gt;60&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# 每 60 秒向客户端发送一次心跳包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ClientAliveCountMax &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;# 客户端连续 3 次未响应心跳包则主动断开连接&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
        </item>
        
    </channel>
</rss>
