我正在为一位同事提供支持,他最近将 MacBook Pro 从 Sierra 升级到了 High Sierra。他正在尝试通过 ssh 连接到我们在现场的一台机器。该机器有一个 IPv6 地址。
该~/.ssh/config
文件为空,并且 ssh 密钥未发生改变。该/etc/ssh/ssh_config
文件是 MBP 上默认安装的文件。Dig 运行良好,并报告了盒子的正确 IPv6 地址。Ping6 也按预期工作。他可以连接到我们内部的 git 服务器(该服务器通过 DNS 使用 IPv4 地址发布),并且可以毫无问题地进行推送/拉取。
当我让他通过 ssh 连接到盒子时,如下所示:
ssh user@hostname
连接失败,原因如下:
ssh: Could not resolve hostname [hostname]: nodename nor servname provided, or not known
将 -vvvv 添加到 ssh 会产生以下输出:
ssh -vvvv [hostname]
OpenSSH_7.6p1, LibreSSL 2.6.2
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to [hostname] port 22.
ssh: Could not resolve hostname [hostname]: nodename nor servname provided, or not known
如果他使用 IPv6 地址连接到设备,则连接成功并且他可以登录。
我们的 DNS 服务器配置正确,并按预期提供地址。我使用的是装有 Sierra 的 MBP,连接没有问题。此外,我们小组都使用不同年份和操作系统的 Macbook(没有其他 High Sierra 用户),到目前为止,他是唯一遇到此问题的人。
编辑:我们尝试了提出的解决方案这里。但是,Apple 的系统完整性保护却碍事。我现在不打算关闭它。我想把它作为最后的手段。
答案1
以下是一种可帮助解决此问题的方法:
# install openssh from brew
brew install openssh
# /usr/local/sbin shouldn't be writable on High Sierra (by default),
# so brew will fail to link the ssh binary
brew unlink openssh
ln -s /usr/local/Cellar/openssh/<version of openssh>/bin/ssh /usr/local/bin/ssh
这链接了一个可用的 ssh 版本。我的同事现在可以按预期进行连接。由于他的 Mac 上现在有两个 ssh 版本,因此务必确保首先在 PATH 上找到通过 brew 安装的 openssh 版本,例如。
PATH=/usr/local/bin:/usr/bin