SSH
- SSH 主要就是一种连接协议,为什么我们需要SSH呢?,传统的协议传输的内容一旦被截获就会完全暴露,内容将会被暴露出去。SSH协议通过对网络数据进行加密和验证,建立SSH客户端和SSH服务器之间的安全隧道,在不安全的网络环境中为网络服务提供了安全的传输通道。
兼具操作简单和传输效率高的优点,但它们都存在相同的问题,即明文传输数据带来的安全隐患。SSH采用加密传输数据、提升认证强度等手段,克服了Telnet和FTP应用中的安全性问题,实现了安全的远程登录和文件传输业务。
- 但是我在使用SSH的过程中居然会出现Remote Host Identification Has Changed error and solution 。 既然有了问题就得解决,接下来我们看看问题是如何解决的。
场景
- 本来通过ssh 连接的服务突然连接不上了,这可打的我措手不及。
- 这台服务是我的虚拟机,之前连接都是没有问题的,而且也确认了用户名是合法的,还没让我输入密码所以不存在密码错误的情况。
问题定位
- 通过问题报错语句[Remote Host Identification Has Changed error and solution] 。 其中 identification 表示认证的意思,翻译过来就是认证失败了。好端端的怎么会认证失败呢?
- 随后就是自我反省的日子了。反思好久还好朋友给我提醒会不会和你重装系统有关系呢?结合这个问题场景感觉有点关系,之前因为系统版本升级所以就做了一个重装系统的操作。现在想来虽然IP还是那个IP,但是服务已然不是之前的服务了。
- 经过翻阅资料发现问题不是重装系统导致的,确切的说并不是重装系统直接导致的,而是因为我们重装了 OpenSSH 导致服务认证失败了。
ssh存储
- 在解决这个问题之前我们先开个小灶, 你知道 ssh 连接的信息存储在哪里吗?你是否注意到当第一次连接某个服务的时候需要你输入yes or no 的确认
- 第一次连接需要我们确认是否继续连接,输入 yes 后服务器的连接信息就会追加到 known hosts 中,对应的位置是 ~/.ssh/known_host。
- 打开文件看一看就能发现,是每个服务的一种签名存储,所以当我们重新安装了OpenSSH 后这里的签名就失效了。
回到正题
- 知道了ssh 存储签名位置过期导致的连接不上了,那么就好解决了我们直接删除 192.168.0.253 对应的签名就可以了。但是问题还是有点小麻烦,上面我们也看到了同一个IP 好像存在好多个签名。这该删除哪一个呢?理论上全部就可以了。还有个问题就是需要我们定位删除也很麻烦。好在linux OpenSSH 给我们提供了命令。
ssh-keygen -R {ssh.server.ip.address} -f file
- 执行 ssh-keygen 之后就会打印发现的和指定服务相关的配置了。然后就会进行更新,我们再次连接就会让我们在执行一次确认了,后面就可以正常操作了。