MacBook - SSH 连接时 IP 错误

MacBook - SSH 连接时 IP 错误

当我尝试使用 ssh 连接到我的服务器时:

ssh -v -p PORT [email protected]

我懂了:

OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to domain.com [62.XX.XXX.157] port 10XXX

IP 错误的地方。

如果我在浏览器中访问该网站,域名会指向正确的 IP。
如果我尝试通过 FTP 访问,则是正确的。

我怎样才能解决这个问题?

答案1

我遇到了类似的问题。我有一台装有最新 Monterey 版本的 Mac 和一个本地网络,其中同时使用了 ipv4 和 ipv6 堆栈!

现在我发现,如果我使用主机名而不是 IP 地址,ssh 会首先尝试 ipv6 连接。在我的情况下,ipv6 地址指向 fritzbox 网络中的占位符主机,因为所需主机在本地 dns 中没有本地 v6 IP。我在本地 dns 服务器中添加了 ipv6 地址。从那时起它就起作用了。

您可以轻松检查这是否是基于 ipv4 /v6 的问题。如果您尝试以下方法,测试您是否使用 ipv4 访问了正确的主机:

ssh -v -4 user@hostname

仔细检查 IPv6 连接:

ssh -v -6 user@hostname

如果目的地不同,则存在 ipv4 / ipv6 解析问题。

在 ssh debug (-v) 输出行“Authenticated to ...”中,您可以看到 ssh 客户端用作目标的目标 IP 地址。

我希望这可以帮助遇到同样困境的人。

答案2

抱歉,克里斯蒂安,我无法继续评论,因为我的超级用户声誉不够……

如果 DNS 解析总体错误:

首先,检查 dns,如果错误则可以更改它,如果 dns 定义正确但解析错误,则只需更改它,通过发出以下命令检查解析 ttl 是什么:

dig +nocmd +noall +answer +ttlid type subdomain.domain.com

让我们说出来答案

subdomain.domain.com   86400 the_wrong_ip

这意味着它将在 DNS 中缓存一天……因此,如果解析不顺利,超过这个时间就表明存在问题。查看不同的 DNS,看看解析问题是否普遍存在。您可以使用

dig @other_nameserver_ip subdomain.domain.com

也许您网络中的路由器缓存了错误的 IP 或获得了错误的解析,但世界其他地方都正常。如果您没有成功,我会将正确的 IP 添加到 hosts 文件中,因为 ftp 使用 gethostbyname 函数,因此它在询问 dns 之前会引用 hosts 文件;但如果必须由第三方调用它……好吧

希望这里的一些提示能帮助你找到问题的根源

答案3

我今天在 Mac OS X High Sierra 上遇到了这个问题;尽管

host domain.com

返回正确的 IP 地址-v,SSH 仍尝试连接到旧版本的 IP 地址。您可以通过向 ssh添加大量标志来解决这个问题,例如,

ssh -vvvv [email protected]
OpenSSH_7.5p1, LibreSSL 2.5.4
debug1: Reading configuration data /Users/razzed/.ssh/config
debug1: /Users/razzed/.ssh/config line 4: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 52: Applying options for *
debug2: resolving "domain.com" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to domain.com [XX.XX.XX.XX] port 22.

host问题是该主机的 IP 地址在 Mac OS DNS 缓存中被错误地缓存,并且与上面位置的输出显示不同[XX.XX.XX.XX]

Neil Gee(世界上最酷的指南)有一个最新的方法来清除 macOS 中的本地 DNS 缓存。截至今日,命令为:

sudo killall -HUP mDNSResponder

一旦我这样做了,ssh就正确地连接到了正确的 IP 地址。

相关内容