我最近注意到,运行 ubuntu 和 openssh-server 的服务器遭受了几次 ssh 暴力攻击。除了采取一些对策外,我自然也变得格外小心。今天早上,当我尝试 ssh 进入服务器时,我收到了 dns 欺骗警告:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for somehost.com has changed,
and the key for the corresponding IP address xx.xx.xxx.xxx
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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.
IP 地址很可能已经更改,这并不奇怪。但我最近没有更改 ubuntu 设置。但是,我通过执行以下命令重新安装了 openssh-server
sudo apt-get remove openssh-server
并重新安装
sudo apt-get install openssh-server
这这让我认为主机密钥仅依赖于目录 /etc/ssh/。在我的情况下,它看起来像这样:
drwxr-xr-x 2 root root 4096 Sep 3 19:12 .
drwxr-xr-x 160 root root 12288 Sep 27 08:41 ..
-rw-r--r-- 1 root root 300261 Aug 11 18:24 moduli
-rw-r--r-- 1 root root 1756 Aug 11 18:24 ssh_config
-rw-r--r-- 1 root root 2542 Sep 3 19:09 sshd_config
-rw------- 1 root root 668 Apr 21 15:27 ssh_host_dsa_key
-rw-r--r-- 1 root root 606 Apr 21 15:27 ssh_host_dsa_key.pub
-rw------- 1 root root 227 Apr 21 15:27 ssh_host_ecdsa_key
-rw-r--r-- 1 root root 178 Apr 21 15:27 ssh_host_ecdsa_key.pub
-rw------- 1 root root 411 Apr 21 15:27 ssh_host_ed25519_key
-rw-r--r-- 1 root root 98 Apr 21 15:27 ssh_host_ed25519_key.pub
-rw------- 1 root root 1675 Apr 21 15:27 ssh_host_rsa_key
-rw-r--r-- 1 root root 398 Apr 21 15:27 ssh_host_rsa_key.pub
-rw-r--r-- 1 root root 338 Sep 3 19:12 ssh_import_id
今天是 9 月 27 日,所以自 4 月以来所有 ssh_host* 文件都没有改变。我不确定用户公钥是否影响主机密钥。因此,为了确保万无一失,我检查了用户 ssh 目录 ~/.ssh/,如下所示:
drwx------ 2 user user 4096 Sep 5 18:41 .
drwxr-xr-x 49 user user 4096 Sep 27 08:43 ..
-rw------- 1 user user 748 Apr 21 19:20 authorized_keys
-rwx------ 1 user user 3326 Jan 21 2016 id_rsa
-rw-rw-rw- 1 user user 748 Jan 21 2016 id_rsa.pub
-rw-r--r-- 1 user user 2726 Mai 3 13:00 known_hosts
所以用户公钥也没有改变。
问题:还有其他因素会影响主机密钥或主机指纹吗?有什么我没有考虑到的吗?重新安装 openssh-server 可能会更改主机密钥吗?如果是,更新的文件在哪里?
[编辑] 我同时通过执行检查了服务器本身的 ECDSA 指纹(参见这了解详情)
$ nmap localhost --script ssh-hostkey
指纹与欺骗通知中显示的指纹相匹配。因此,似乎不是服务器发生了变化,而是我用来连接服务器的机器上的 known_hosts 文件发生了变化。也许 Germar 是对的,IP 地址与我之前连接的服务器相匹配。我仍然不确定我为什么会收到欺骗通知。但除非 nmap 命令也没有被欺骗(我认为没有),否则我应该有一个安全的连接。
答案1
openssh-server
如果您使用apt-get purge openssh-server
或清除了 ,则原始主机密钥将被删除apt-get remove --purge openssh-server
。在这种情况下,密钥将重新生成,并且自然会有所不同。如果openssh-server
刚刚删除,则重新安装时不应触及密钥文件。
主机密钥确实只依赖于 中的文件,除非 ssh 配置为查找其他地方。中任何看起来不寻常的行都/etc/ssh/
表明了这一点。 默认的 HostKey 行是:HostKey
/etc/ssh/sshd_config
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
绝对值得检查该文件以查看您是否使用来自非标准位置的主机密钥,因为您的密钥文件似乎没有被修改。
如果服务器上的密钥符合预期,则警告很可能是在客户端生成的。正如 Germar 所说,问题可能是由于重复使用之前由另一台服务器使用的动态分配 IP 地址引起的。
答案2
当您删除软件包并重新安装时,密钥将保持不变。只有当您清除软件包时,它们才会被删除。并且只有当密钥文件不存在时,才会创建它们。要全面了解发生了什么,您可以阅读以下文件:
/var/lib/dpkg/info/openssh-server.postinst
/var/lib/dpkg/info/openssh-server.postrm
/var/lib/dpkg/info/openssh-server.preinst
/var/lib/dpkg/info/openssh-server.prerm
这些是 dpkg 在删除、安装或重新配置包时运行的脚本。