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

macOS Monterey下SSH接入失效,重启sshd仅临时恢复的问题求助

macOS Monterey下SSH接入失效,重启sshd仅临时恢复的问题求助

我家里有台2014年末款的Mac mini,装的是macOS Monterey 12.7.3,多年来一直开放SSH远程接入都没出过问题,最近突然掉链子了。目前发现重启sshd进程能暂时解决问题,用的命令是:

sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

但好景不长,基本上24小时内SSH又会卡死,我翻遍了日志也没找到任何线索。

下面是我梳理的一些信息和排查过的点:

可能的关联因素

  • 几个月前装了Cisco AnyConnect VPN,不确定是不是这个导致的(因为之前有段时间没用到远程SSH,没法百分百确定故障是从装VPN后开始的)。但就算彻底关掉VPN,问题还是一样,而且VPN设置里已经允许本地LAN访问了。
  • 家里用的是TP-Link Archer A7路由器,配置了DDNS方便远程连接。一开始我以为是路由器或DDNS的问题,但重启Mac上的sshd就能恢复连接,说明问题肯定不在路由那边。

版本与环境信息

我的sshd版本是OpenSSH_8.6p1,LibreSSL 3.3.6。电脑上装了Homebrew,自己开发的软件用了不少brew的库,也会定期更新brew和相关组件。

关键故障表现

我现在确定问题出在Mac本身:用ssh localhost能正常连接,但用本地LAN的192.168.0.x地址就连不上。能连localhost说明ssh-agent在正常运行,也能正确启动sshd进程。

已尝试的排查步骤

  • 关闭Mac防火墙(本来就已经配置允许SSH接入了),但完全没用。
  • 之前在Stack Overflow发过类似问题,收到几个建议,这里说下我的排查结果:
    • 虽然Mac没设静态IP,但路由器DHCP已经固定给它分配了同一个LAN地址,WAN地址变化的话DDNS也会自动处理。而且故障时,就连从本机用LAN地址连接都不行,只有localhost能连,所以IP地址肯定不是问题。
    • 连接时的错误信息就是超时:
      (base) bash-3.2$ ssh 192.168.0.132
      ssh: connect to host 192.168.0.132 port 22: Operation timed out
      
    • ssh -vvv开启全量日志,输出到下面这一行就卡住不动了:
      (base) bash-3.2$ ssh -vvv 192.168.0.132
      OpenSSH_8.6p1, LibreSSL 3.3.6
      debug1: Reading configuration data /Users/jeff/.ssh/config
      debug1: Reading configuration data /etc/ssh/ssh_config
      debug1: /etc/ssh/ssh_config line 21: include /etc/ssh/ssh_config.d/* matched no files
      debug1: /etc/ssh/ssh_config line 54: Applying options for *
      debug1: /etc/ssh/ssh_config line 58: Applying options for *
      debug2: resolve_canonicalize: hostname 192.168.0.132 is address
      debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/Users/jeff/.ssh/known_hosts'
      debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/Users/jeff/.ssh/known_hosts2'
      debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
      debug3: ssh_connect_direct: entering
      debug1: Connecting to 192.168.0.132 [192.168.0.132] port 22.
      debug3: set_sock_tos: set socket 3 IP_TOS 0x48
      
    • 试过用ssh -o IPQoS=none <hostname>跳过服务质量设置,结果还是一样超时。
    • 有人提到可能和Homebrew的$PATH配置有关,但我觉得不是:那个问题是密钥认证失败,而我这里是连接直接卡死。我查过shell里openssl的路径,发现是Anaconda目录下的,于是把rc文件里添加Anaconda路径的行注释掉了,还是没用。而且其他没装Anaconda的设备(比如手机上的终端模拟器)连过来也一样失败,我猜root运行的sshd和ssh-agent应该用的是系统自带的版本。

备注:内容来源于stack exchange,提问作者Jeffrey B Mulligan

火山引擎 最新活动