我有一个位于端口转发防火墙后面的服务器。
Server <---> Firewall <------> NAT Port 222
|
-----------> VPN
我可以通过 VPN 使用密钥 ssh 进入。在服务器上执行以下操作:
sever:~> ssh-keygen -lf /etc/ssh/ssh_rsa_host_key
显示 HOSTKEY
我尝试从外部通过 ssh 进入它:
ssh server.external
结果为“远程主机标识已更改”
The fingerprint for the RSA key sent by the remote host is
HOSTKEY.EXTERN
指纹 HOSTKEY 和 HOSTKEY.EXTERN 不同。
如果我通过 VPN 和其内部 IP ssh 进入它,一切都正常。
2个问题:
- 为什么HOSTKEY.EXTERN和HOSTKEY指纹不同?
- 如何从外部检查报告的主机密钥?
编辑:第 2 部分的答案和更多奇怪的发现:
我现在在内部和外部执行了“ssh-keyscan server”,结果是两个不同的密钥。
ssh-keyscan server.external > server.external.keyscan
ssh-keyscan server.internal > server.internal.keyscan
然后我会对这些进行指纹识别:
ssh-keygen -lf server.external.keyscan
ssh-keygen -lf server.internal.keyscan
两个指纹不同。我不明白。
答案1
SSH 很挑剔,因为主机名必须匹配中的给定键known_hosts
。由于您是从外部访问它,因此您的 SSH 客户端看到的服务器来自 external.ip 而不是其内部地址。
我能想到的最好的解决方法是使用两个密钥对 - 一个用于外部访问,一个用于内部访问。这样两个密钥对都会在 中known_hosts
。