多年来,我一直允许我的一台家用机器上的 ssh 传入,从未发生过任何事故。最近它停止工作了。我发现可以通过重新启动 sshd 进程来修复此问题,使用以下命令:
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
此后,它会工作一段时间,但通常会在 24 小时内再次卡住。我在日志中寻找线索,但到目前为止还没有找到任何东西。
Mac mini(2014 年末)、MacOS Monterey 12.7.3、SSH-2.0-OpenSSH_8.6
几个月前,我安装了 Cisco AnyConnect VPN,我想知道这是否是罪魁祸首(虽然我不能确定故障是否从那时开始,因为在此之前我已经很长时间没有使用远程 ssh 了),然而在我关闭它之后,行为是一样的,并且该应用程序配置为即使在 VPN 运行时也允许本地 LAN 访问。
我的家庭 LAN 是一个 TP-Link 路由器(Archer A7,AC 1750),并且已经设置了 DDNS,以便我可以远程连接到相关计算机,我第一次注意到这个问题是在我无法远程登录的时候,有一段时间我错误地认为问题出在路由器和/或 DDNS 上,但我认为通过在 Mac 上重新启动 sshd 来解决问题这一事实驳斥了任何此类解释。
版本sshd
是OpenSSH_8.6p1, LibreSSL 3.3.6
。我安装了 Homebrew,在自己的软件中使用了许多库,并且相当定期地更新。
问题似乎出在 Mac 本身上:我可以使用 连接它ssh localhost
,但不能使用本地192.168.0.x
LAN 地址。事实上,我能我认为使用连接ssh localhost
表明 ssh-agent 已启动并正在运行,并且正确启动sshd
。
我尝试禁用 Mac 防火墙,但没有什么作用。(它已经配置为允许传入ssh
)。
几周前我发过Stack Overflow 上此问题的版本,并在被禁用之前收到了一些建议,因为它“与编程无关”。但以下是针对建议中提出的一些问题的回答:
Mac 没有静态 IP(这就是为什么需要 DDNS!)。但是,路由器 DHCP 配置为始终为我的家用电脑和打印机分配相同的 LAN 地址,因此本地 LAN 地址不会改变。外部 WAN 地址很少改变,并且由 DDNS 透明处理。这似乎不是问题,因为当它停止工作时,即使从机器本身使用本地 LAN 地址,它也会停止工作(尽管如果
localhost
指定,它会工作)。运行时
ssh
,它会停留很长时间并最终打印“操作超时”:(base) bash-3.2$ ssh 192.168.0.132 ssh: connect to host 192.168.0.132 port 22: Operation timed out
在完全详细模式下运行时,挂起之前会显示以下内容:
(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
在的建议下harrymc
,我尝试了ssh -o IPQoS=none <hostname>
,但结果是一样的。
giacomo1968
建议这可能与这个问题涉及 homebrew 和$PATH
,但我不这么认为。首先,该问题是关于使用密钥进行身份验证失败,而在我的情况下,连接尝试只是挂起。我确实openssl
在我的 shell 中检查了来自哪里,令我惊讶的是,它来自 anaconda 目录,因此我编辑了rc
文件,注释掉了将 anaconda bin 目录添加到路径的行,但这没有什么区别。此外,当尝试从未安装 anaconda 的其他主机连接时会出现此问题(包括我手机上的终端仿真器,它没有 HomeBrew)。我不确定如何检查,但我会假设以root 身份运行的sshd
和ssh-agent
使用系统提供的版本。