我在 DNS 中更改了 ubuntu 服务器的 IP 地址
前
10.x.x.111
后
10.x.x.222
我已经刷新了 dns 缓存,但是当我尝试 ssh 进入机器时,ssh 仍然尝试连接到旧 IP。
host foo.example.com
10.10.10.222 <= 222 is the correct *new* ip address
ssh -vv -F /dev/null -o UserKnownHostsFile=/dev/null foo.example.com
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /dev/null
debug2: ssh_connect: needpriv 0
debug1: Connecting to foo.example.com [10.x.x.111] port 22. <= 111 is the incorrect *old* address
我已验证旧 IP 不存在于/etc/hosts
~/.ssh/known_hosts
也不存在~/.ssh/config
为什么 ssh 找到错误的 IP 地址?
更新
经过一夜的等待,今天早上 ssh 似乎已经连接到了正确的 IP 地址。
既然没有答案,我就解释一下这个问题。它们解析 dns 名称的方式有何ssh
不同?host
更新2
我又重现了这个。host
显示正确的ip,ping
并ssh
显示旧的ip。
这是 ping 的 strace 输出 http://pastebin.com/ifnrqDP6
答案1
原因是在 OSX 上,有多个缓存需要刷新。由于我的工作站是 Mac,运行 yosemite,因此我运行了以下命令
sudo discoveryutil mdnsflushcache
https://support.apple.com/en-us/HT202516
事实证明我还需要刷新 udns 缓存
sudo discoveryutil udnsflushcaches