You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

解决MacOS与Ubuntu虚拟机之间的SSH连接无活动超时问题

解决MacOS与Ubuntu虚拟机之间的SSH连接无活动超时问题

我之前也碰到过一模一样的情况——用VS Code通过SSH连Ubuntu VM,没一会儿就弹出client_loop: send disconnect: Broken pipe,折腾了好几天才找到几个靠谱的解决办法,给你分享下:

一、先确保Ubuntu端的SSHD配置真的生效了

很多人改了配置却忘了重启服务,导致设置白搭:

  1. 打开Ubuntu的SSHD配置文件:
    sudo nano /etc/ssh/sshd_config
    
  2. 确认以下配置没有被注释(去掉前面的#),可以把ClientAliveCountMax调得更高一点,增加重试次数:
    TCPKeepAlive yes
    ClientAliveInterval 30
    ClientAliveCountMax 10
    
  3. 保存退出后,重启SSHD服务:
    sudo systemctl restart sshd
    
  4. 验证配置是否生效:
    sshd -T | grep clientalive
    
    执行后能看到当前生效的clientaliveintervalclientalivecountmax参数,说明配置已经生效了。

二、优化Mac端的SSH配置,避免参数冲突

你之前把TCPKeepAlive设为no,其实可以改成yes和Ubuntu端匹配,再补充几个参数增强稳定性:

  1. 打开Mac的SSH配置文件:
    nano ~/.ssh/config
    
  2. 针对你的Ubuntu VM添加或修改配置:
    Host ubuntu-vm  # 这里填你的VM名称或IP
      TCPKeepAlive yes
      ServerAliveInterval 20  # 缩短心跳间隔,更频繁发送保活包
      ServerAliveCountMax 10
      ExitOnForwardFailure no
      ConnectTimeout 0  # 取消连接超时限制
    
  3. 保存后,关掉所有已有的SSH连接,重新通过VS Code连接试试。

三、调整VS Code Remote SSH的专属设置

有时候VS Code会忽略系统级的SSH配置,用自己的参数,所以直接在VS Code里设置更稳妥:

  1. 打开VS Code,按Cmd+,(Windows是Ctrl+,)打开设置面板
  2. 搜索以下几个选项并修改:
    • remote.SSH.serverAliveInterval:设置为20
    • remote.SSH.serverAliveCountMax:设置为10
    • remote.SSH.connectTimeout:设置为0(表示不限制连接超时)
  3. 重启VS Code,重新连接虚拟机,看看还会不会超时。

四、检查虚拟机的网络模式

如果你的Ubuntu VM用的是NAT模式,很可能是宿主机的网络转发机制回收了空闲连接,建议改成桥接模式

  • 打开虚拟机软件(比如VirtualBox或VMware),找到你的Ubuntu VM的网络设置,把网络连接方式改成“桥接适配器”
  • 重启虚拟机后,它会和Mac处于同一个局域网,连接稳定性会提升很多,减少无活动超时的概率。

五、排查Mac的节能与防火墙设置

Mac的节能模式或防火墙也可能导致SSH连接中断:

  1. 打开Mac的「系统设置」→「电池」→「节能」,确保“接通电源时防止电脑自动进入睡眠”(笔记本)或“防止电脑自动进入睡眠”(台式机)是勾选状态
  2. 打开「系统设置」→「网络」→「Wi-Fi」→「高级」,勾选“唤醒以供Wi-Fi网络访问”,避免Wi-Fi休眠导致断连
  3. 打开「系统设置」→「网络」→「防火墙」,确认允许SSH(远程登录)的出站和入站连接。

终极方案:用autossh自动重连

如果以上方法都没解决,可能是路由器或网络环境的问题(比如路由器会自动回收空闲连接),可以试试用autossh实现自动重连:

  1. 在Ubuntu上安装autossh:
    sudo apt install autossh
    
  2. 在Mac上用autossh连接Ubuntu:
    autossh -M 0 -o "ServerAliveInterval 20" -o "ServerAliveCountMax 10" your-username@ubuntu-vm-ip
    
    这样即使连接断了,autossh会自动帮你重新连上,完美解决无活动超时的问题。

备注:内容来源于stack exchange,提问作者Robot

火山引擎 最新活动