我已经在服务器上设置了 SSH 证书颁发机构,包括带有适用主体的签名主机密钥。我已经设置了本地known_hosts
文件以识别证书颁发机构,当我直接通过 SSH 进入主机时,它可以正常工作。但是,我还在主机上设置了反向隧道,以便通过我设置的虚拟机通过 SSH 进入主机。尽管签名的主机密钥中有一个适当的字符串,但我不知道如何让我的 SSH 客户端将其识别为已知主机。如何签署主机密钥或设置 known_hosts 条目,以便在通过第三方建立隧道时识别主机?
以下是我客户的回复known_hosts
:
@cert-authority *.DOMAIN.us ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRd5kjlix8PN1SsQ...
这是ssh-keygen -L
主机密钥:
pi@ca51-1:~ $ ssh-keygen -L -f /etc/ssh/ssh_host_ecdsa_key-cert.pub
/etc/ssh/ssh_host_ecdsa_key-cert.pub:
Type: [email protected] host certificate
Public key: ECDSA-CERT SHA256:at+6J0W9S0BZj96YeJqtUCAAksUFu8P840ZCkVm9fb0
Signing CA: RSA SHA256:AYPOCzb67UvUUIoULa3BgstmX1XIDP9+4bClTycMC9g
Key ID: "ca51-1.in"
Serial: 9
Valid: forever
Principals:
ca51-1.local
ca51-1.in.DOMAIN.us
[tunnel.in.DOMAIN.us]:10030
Critical Options: (none)
Extensions: (none)
当我尝试本地连接到服务器()时,我可以毫无问题地连接。(我刚刚注意到,尽管它可以工作,但它并不在我的文件中。)ssh [email protected]
*.local
known_hosts
请注意,我有隧道地址:端口作为主体([tunnel.in.DOMAIN.us]:10030
)。
当我尝试通过该隧道 ssh 进入服务器时收到错误:
ssh -p 10030 [email protected]
key_cert_check_authority: invalid certificate
Certificate invalid: name is not a listed principal
The authenticity of host '[tunnel.in.awosome.us]:10030 ([138.68.10.xxx]:10030)' can't be established.
ECDSA key fingerprint is SHA256:at+6J0W9S0BZj96YeJqtUCAAksUFu8P840ZCkVm9fb0.
以下是更多调试信息-v
:
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host certificate: [email protected] SHA256:at+6J0W9S0BZj96YeJqtUCAAksUFu8P840ZCkVm9fb0, serial 9 ID "ca51-1.in" CA ssh-rsa SHA256:AYPOCzb67UvUUIoULa3BgstmX1XIDP9+4bClTycMC9g valid forever
debug1: checking without port identifier
debug1: Host 'tunnel.in.awosome.us' is known and matches the ECDSA-CERT host certificate.
debug1: Found CA key in /Users/jshannon/.ssh/known_hosts:31
key_cert_check_authority: invalid certificate
Certificate invalid: name is not a listed principal
为了确认我没有犯错误,known_hosts
我复制了第 31 行的密钥(ssh-rsa ....
),将其粘贴到临时文件中,然后运行ssh-keygen -l
:
ssh-keygen -l -f temp_keys/key.pub
2048 SHA256:AYPOCzb67UvUUIoULa3BgstmX1XIDP9+4bClTycMC9g AWOS (RSA)
我认为也许主机格式principals
不正确,但如果我接受未知主机,我会将其密钥添加到known_hosts
:
[tunnel.in.DOMAIN.us]:10030,[138.68.10.xxx]:10030 ecdsa-sha2-nistp256 AAAAE2VjZHNhLX
第一个条目与主体中的条目匹配,直到格式和端口号。
我尝试了几次迭代principals
条目,但都没有成功。理想情况下,我希望有一个主体条目将主机锁定到 FQDN(tunnel.in.DOMAIN
)和端口,但我可以使用该机器上的任何端口。我也尝试了一些星号。
答案1
这个问题问得有点晚了(这个问题问了 5 年之后),但我今天自己也遇到了这个问题,想把这个问题记录下来,供其他遇到这个问题的人参考。答案很简短,但提示却很模糊。关键部分是:
debug1: Found CA key in /Users/jshannon/.ssh/known_hosts:31
key_cert_check_authority: invalid certificate
Certificate invalid: name is not a listed principal
OpenSSH 试图说明的要点是,您用于连接的服务器的名称(即[tunnel.in.DOMAIN.us]:10030
)应该在提供的证书中列为主体 - 但事实并非如此。生成包含此主体的证书将解决该问题。