使用 Paramiko 检索所有主机密钥(如 ssh-keyscan)
Retrieve all host keys using Paramiko (like ssh-keyscan)
使用 OpenSSH 8 我 运行 ssh-keyscan
我的一个系统。
它 returns 键用于 ssh-rsa
、ecdsa-sha2-nistp256
和 ssh-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
使用 OpenSSH 8 我 运行 ssh-keyscan
我的一个系统。
它 returns 键用于 ssh-rsa
、ecdsa-sha2-nistp256
和 ssh-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