我正在尝试通过我的 Mac 上的终端手动连接 OVH(unbuntu 16)云服务器上的 serverpilot ( )ssh [email protected]
操作失败一次,现在我尝试重新设置它,但收到一条错误消息“警告:远程主机标识已更改!”
我在博客上看到,打字ssh-keygen -R hostname
可能会解决这个问题,但当我这样做时,我收到了一条消息"Host hostname not found in /Users/GregMac/.ssh/known_hosts"
有什么办法可以解决这个问题吗?(我对服务器配置和命令行完全是个新手……所以我依赖 serverpilot)
谢谢
答案1
简短答案
自上次尝试访问该主机上运行的 SSH 服务器以来,有一个文件已发生更改。该文件是
/Users/whateveryourusernameis/.ssh/known_hosts
该文件中的某处有一个条目,只有一行,以您尝试访问的主机开头,并以括号形式显示,如[vpsXXX.ovh.net]
。
如果你是肯定您尝试访问的服务器是您刚刚自行更改和设置的服务器,可以安全地删除该行并重试。
电话回复,较长
SSH 是系统管理员最基本的工具,并且怎么运行的值得你关注。
当您联系 ssh 服务器时,服务器采取的第一步是向 ssh 客户端提供其自己的公共主机密钥。此密钥通常附加到客户端的~/.ssh/known_hosts
文件中,因此如果此密钥在不同的 ssh 会话之间发生变化,客户端将收到警告,告知该主机不再是它之前联系的原始主机。这会提醒您,您联系到的主机可能是冒名顶替者,除非您已经毫无疑问地知道该主机确实已发生变化。
主机密钥是SSH 协商过程,如果您正在管理任何系统,您应该熟悉它。此密钥通常只生成一次,即第一次启动 SSH 服务器时。因此,如果您收到主机密钥已更改的警告,则发生了以下事件之一:
- 部署了新的服务器(或机器映像等),并且曾经指向前一个服务器的 IP 地址或域名已更改为指向新服务器(这很常见,尤其是在云环境中)。
- 有人更改或删除了机器上的公共主机密钥。我立即想知道为什么,因为通常没有理由这样做——一个例外可能是极其严格的安全程序,它会不时轮换密钥。即使如此,在这种情况下,我希望分发新的公钥指纹以避免此错误。
- 有人成功拦截了您发送到该 IP 或域名的流量,并将其指向自己的服务器,以试图发起 MITM SSH 攻击,或者更有可能的是,他们试图插入自己以收集单独端口和协议(例如 HTTPS)上的流量。
如果您在云环境中工作,新的机器映像和实例会一直被替换以替换旧的。因此,要消除警告并继续通过 SSH 连接到新主机,只需从文件中删除带有旧指纹的违规行即可~/.ssh/known_hosts
。按照良好的做法,最好在知道替换发生后立即将其删除,然后登录一次以确认并存储新主机密钥。
最后,尊重您的同事,并让他们知道事情发生了,这样他们就不会觉得有必要自己拉响火警。
后记(或者,检查 ssh-keygen -R 是否失败)
我发现与您所做的页面类似的页面,并且有一条关于新行为的注释,该注释可能会将公共主机密钥的标识更改为某个散列值,这是我以前从未听说过的——而不是[vpsXXX.ovh.net]
,它可能看起来像[BF8JDF9SS@67IX]
。如果是这种情况,并且您没有进行太多编辑,您可以移动known_hosts 文件,通过 ssh 连接,将创建一个只有一行的新文件。那行将具有您连接的域或 IP 的正确哈希值,因此您可以从新创建的文件中用新密钥替换旧主机密钥。将编辑过的 known_hosts 文件移回原位,然后,您就更新了该连接的存储公共主机密钥。