使用 Paramiko 检索所有主机密钥(如 ssh-keyscan)

Retrieve all host keys using Paramiko (like ssh-keyscan)

使用 OpenSSH 8 我 运行 ssh-keyscan 我的一个系统。 它 returns 键用于 ssh-rsaecdsa-sha2-nistp256ssh-ed25519

我想在 Python 中使用 Paramiko 来获得相同的结果。 我刚刚开始深入研究 Paramiko,我是新手。 也许不能这样做或者有更好的方法?

import paramiko
host = "x.x.x.x"  #<=IP address of system

transport = paramiko.Transport(host)
transport.connect()

key = transport.get_remote_server_key()

print(key.get_name())
print(key.get_bits())
print(key.get_base64())

transport.close()

我只会取回 ssh-ed25519 密钥。

我没有看到任何迭代返回列表的方法(可能是我忽略了)。

有人知道如何从这样的调用中取回 ecdsa-sha2-nistp256 密钥吗?

Transport.get_remote_server_key returns Paramiko 和您的服务器商定的密钥。没有可用的列表。服务器仅提供他们同意的特定密钥。服务器没有所有密钥。

如果你想要另一个密钥算法,你必须告诉Paramiko向服务器询问它。

在连接之前,做这样的事情:

transport.get_security_options().key_types = ["ecdsa-sha2-nistp256"]

并为您想要的每个算法重复连接。这就是 ssh-keyscan 所做的。

这些是关键的算法类型:

  • ssh-ed25519
  • ecdsa-sha2-nistp256
  • ecdsa-sha2-nistp384
  • ecdsa-sha2-nistp521
  • ssh-rsa
  • ssh-dss