我已经将带有 Raspbian OS 的 Raspberry Pi 连接到本地网络,并使用 ssh 密钥设置了 SSH 登录。ssh [email protected]
我仅通过(为Raspberry Pi分配了静态IP)成功登录。
我现在已经删除了 Raspbian 操作系统,并插入了一张带有 Ubuntu Server(无头)的 SD 卡。
我打开 Raspberry Pi 并尝试登录,但出现错误:
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
ERROR: Someone could be eavesdropping on you right now (man-in-the-middle attack)!
ERROR: It is also possible that a host key has just been changed.
ERROR: The fingerprint for the ECDSA key sent by the remote host is
ERROR: SHA256:asfasfdasdfasfdasfdasdfasdfasdfasdfasfasdf.
ERROR: Please contact your system administrator.
ERROR: Add correct host key in /home/joedoe/.ssh/known_hosts to get rid of this message.
ERROR: Offending ECDSA key in /home/joedoe/.ssh/known_hosts:13
ERROR: remove with:
ERROR: ssh-keygen -f "/home/joedoe/.ssh/known_hosts" -R "192.168.5.163"
ERROR: ECDSA host key for 192.168.5.163 has changed and you have requested strict checking.
ERROR: Host key verification failed.
我继续添加到我的.ssh/config
:
host 192.168.5.163
StrictHostKeyChecking no
但现在我明白了
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:asdfasdfasdfasdfasdfasdfasdfasdfasdf.
Please contact your system administrator.
Add correct host key in /home/joedoe/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/joedoe/.ssh/known_hosts:13
remove with:
ssh-keygen -f "/home/joedoe/.ssh/known_hosts" -R "192.168.5.163"
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
[email protected]: Permission denied (publickey,password).
显然问题是我想在同一个 IP 地址上登录到两个不同的操作系统,但是新的 Ubuntu 操作系统不支持 SSH 登录设置,它不允许我以任何方式登录。
为了能够互换使用这两个操作系统,我应该如何进行?
您可以按照错误中的说明解决直接问题(每次切换框时都必须这样做)-
您遇到的问题是您的计算机检测到其登录的系统与之前看到的系统不同,并且警告是为了防止中间人攻击。
有很多方法可以正确处理这个问题。他们包括:
为每个框设置名称,
/etc/hosts
然后按名称而不是 IP 引用 SSH 连接。这样,SSH 会将不同的服务器指纹与每个名称相关联。忽略检查(这会使您面临中间人攻击,因此只有在您了解并接受风险时才这样做。)您可以通过添加
-o UserKnownHostsFile=/dev/null
到您的 ssh 命令或-o StrictHostKeyChecking=no
2a。您可以创建一个仅忽略一个 IP 的密钥检查的配置,方法是将以下内容放入
~/.ssh/config
主机 192.168.5.163 StrictHostKeyChecking no UserKnownHostsFile=/dev/null
除非机器扮演相同的角色,否则我不会建议这样做,但是您可以
/etc/ssh
在两台服务器(以及restart sshd
您更改的服务器)上使主机密钥相同。这样,两台服务器对客户端来说都是一样的。有几种潜在的解决方案。
最简单的解决方案是 davidgo 在他的回答中提出的一个,正如他所提到的,这会让您容易受到中间人攻击(不太可能,但即使在私人情况下也可以练习良好的安全性)。
正如 Eugen Rieck 所提议的,一个稍微好一点的解决方案是
/etc/ssh/ssh_host_*key*
在两个目标操作系统系统之间同步文件。一种更可靠的方法是专门决定要连接到哪个操作系统,因此如果您连接到错误的操作系统,您会收到错误消息。例如,如果脚本针对错误的操作系统,这将允许使用 ssh 的脚本失败。
您可以通过在
~/.ssh/ssh_config
.然后您可以连接
ssh <your_user>@raspbian-pi
以检索 Raspbian OS 密钥,然后在您的 Raspberry Pi 上切换到 CentOS,执行相同操作ssh <your_user>@centos-pi
以获取 CentOS 密钥。然后,将来,每当您连接到错误的操作系统时,您都会收到主机密钥错误。确保在第一次使用 SSH 命令时使用正确的操作系统,这样就不会意外地将 CentOS 主机密钥存储在 Raspbian 已知主机文件中。免责声明:我从未使用过此解决方案,也无法对其进行测试,但根据我的理解和 ssh 的文档,它应该可以正常工作。
最简单的方法是从一个安装复制
/etc/ssh/ssh_host_*_key*
到另一个 - 这将为两个操作系统提供相同的主机密钥,从而获得指纹。另一种选择是为每个操作系统提供不同的 IP 地址。他们现在得到相同的,因为 DHCP 服务器看到相同的 MAC 地址。因此,您可以配置一个安装以使用静态 IP 地址。
不过,我会遵循 Eugen 的建议 - 这可以简化事情。或者获得第二个 Pi 并同时运行两台机器。
我个人对我的所有 Linux 服务器都使用 OpenSSH 证书颁发机构。这在设置新设备和编排我的终端设备(台式机、笔记本电脑和跳转主机)时节省了很多麻烦,我之前在博客中提到过.
虽然此功能最初并非针对此(不寻常的)用例而设计,但它提供了该问题的替代解决方案。只需使用 CA 的私钥签署两个主机密钥并将公共部分添加到您的
known_hosts
文件中,您的 SSH 客户端将自动信任两组主机密钥,而不会因差异而对您大喊大叫。不过,您可能仍需要ssh-keygen -R
事先删除任何记住的主机密钥。这样做的好处是两个系统都可以保持它们的主机密钥分开和不同,这使您能够通过主机密钥(和证书 - 您可以在签署证书时自定义“身份”字段)来区分它们。这也是安全的,因为您不必盲目信任出现在该特定 IP 地址的任意主机。
即使您想保护自己免受泄露的密钥,您也可以在签署证书时添加“允许的名称/IP 地址”作为“主体”,例如:
除非从 的主机提供,否则证书将不受信任
192.0.2.0
,除非攻击者以某种方式劫持您的流量以及主机密钥和证书。好吧,现在我不得不承认在两个操作系统之间复制主机密钥更容易,因为它们毕竟在同一台物理机器上。