你是不是在使用 SSH 连接服务器时,突然弹出 hostkey 错误?明明之前连接好好的,现在却死活连不上,急得抓耳挠腮?别担心,新手遇到 hostkey 错误很常见,今天小编就来手把手教你解决,哪怕你是刚接触 SSH 的小白,跟着步骤做也能搞定。
首先得说说,为啥会出现 hostkey 错误呢?简单说,hostkey 就像服务器的 “身份证”,你第一次连接服务器时,这个 “身份证” 会存在你电脑里。可要是服务器换了系统、重装了 SSH 服务,或者你连接的服务器地址被别人改了,“身份证” 就对不上了,错误自然就来了。我们在使用 SSH 工具(比如 PuTTY、Xshell,或者直接用命令行)的时候,最常碰到的就是 “Host key verification failed” 这个提示,这就是典型的 hostkey 错误。
那具体该怎么解决呢?不同的操作系统,方法稍微有点不一样,小编分开来讲。
先看 Windows 系统,如果你用的是 PuTTY:
- 打开 PuTTY,在左侧导航里找到 “Session”,你会看到之前保存的服务器连接记录,选中那个出问题的记录。
- 然后点右边的 “Load”,加载这个连接的配置。
- 接着,在左侧找到 “SSH”,点开旁边的小加号,再找到 “Host Keys”。
- 这里会显示你保存过的 hostkey,找到对应服务器的那条,点 “Remove” 删掉。
- 最后回到 “Session”,点 “Save” 保存一下,再重新连接试试,这样就可以了。
要是你用的是 Xshell 呢?步骤更简单:
- 打开 Xshell,在会话管理器里找到报错的服务器,右键它。
- 选择 “属性”,然后在弹出的窗口里点 “SSH” 选项卡。
- 找到 “主机密钥” 这一项,点 “删除”,确认之后重新连接,一般就没问题了。
再说说 Linux 或者 macOS 系统,用终端命令行的朋友看这里:
- 打开终端,输入命令:ssh-keygen -R 服务器地址(比如 ssh-keygen -R 192.168.1.1),这个命令是用来删除本地保存的对应服务器的 hostkey 的。
- 按回车之后,会提示你已经删除,这时候再用 ssh 命令连接服务器,会让你重新确认 hostkey,输入 “yes”,再输密码,就能连上了。
可能有朋友会问,有没有更直接的办法?比如直接找到保存 hostkey 的文件删掉?当然可以。Linux 和 macOS 里,hostkey 保存在~/.ssh/known_hosts 这个文件里,你可以用文本编辑器打开它,找到包含服务器地址的那一行,删掉,保存文件就行。不过小编觉得,用命令行更简单,不容易出错。
下面给大家做个表格,对比一下不同系统和工具的解决方法,看得更清楚:
系统 / 工具 | 解决步骤概要 |
---|---|
Windows(PuTTY) | 加载会话→找到 Host Keys→删除对应记录→保存会话 |
Windows(Xshell) | 右键会话→属性→SSH→删除主机密钥 |
Linux/macOS(终端) | 执行 ssh-keygen -R 服务器地址 或编辑 known_hosts 文件 |
有些朋友可能会担心,删除 hostkey 会不会有安全问题?其实不用太怕,只要你确认连接的服务器是你自己的,或者是可信的,重新确认 hostkey 就没事。这就好比你朋友换了身份证,你得重新记一下新的号码,道理是一样的。
还有个情况,就是你第一次连接服务器就出现 hostkey 错误,这时候该怎么办呢?这种情况比较少见,可能是服务器配置有问题,或者你输入的服务器地址、端口错了。先检查一下地址和端口对不对,没错的话,可以问问服务器管理员,是不是 hostkey 配置有问题。
小编之前帮同事解决过一个类似的问题,他就是服务器重装系统后,用 Xshell 连接一直报 hostkey 错误,按照上面说的步骤,删除主机密钥后,一下子就连上了,他还说早知道这么简单,就不用折腾一下午了。所以呀,遇到问题别慌,一步一步排查,总能解决的。
其实 hostkey 错误真的不算难搞,核心就是让本地的记录和服务器的新 “身份证” 对上。不管你用什么工具、什么系统,思路都是删除旧的记录,让系统重新识别新的 hostkey。希望这些方法能帮到你,要是你还有其他解决办法,也欢迎在评论区分享,大家一起交流嘛。