Python 获取base 64中ssh服务器的主机密钥
我正在使用paramiko,我需要base 64中ssh服务器的主机密钥,用于以下行:Python 获取base 64中ssh服务器的主机密钥,python,macos,ssh,terminal,paramiko,Python,Macos,Ssh,Terminal,Paramiko,我正在使用paramiko,我需要base 64中ssh服务器的主机密钥,用于以下行: key = paramiko.RSAKey(data=base64.decodestring('...')) 有人知道通过MacOSX终端、python脚本或其他方式找到这个吗?谢谢您只需要执行一次,还是需要能够在运行时以编程方式获取主机密钥?如果只有一次 ssh -v <hostname> ssh-v 将显示主机密钥 >>从paramiko.client导入SSHClient >&
key = paramiko.RSAKey(data=base64.decodestring('...'))
有人知道通过MacOSX终端、python脚本或其他方式找到这个吗?谢谢您只需要执行一次,还是需要能够在运行时以编程方式获取主机密钥?如果只有一次
ssh -v <hostname>
ssh-v
将显示主机密钥 >>从paramiko.client导入SSHClient
>>> from paramiko.client import SSHClient
>>> client = SSHClient()
>>> client.connect('hostname')
# This probably will fail since there's no auth set here
>>> rsa_key = client.get_transport().get_remote_server_key()
<paramiko.rsakey.RSAKey object at 0x109305e90>
# however, this still exists
>>> rsa_key.get_base64()
u'AAAAB3NzaC1y...Nhd'
>>>client=SSHClient()
>>>client.connect('主机名')
#这可能会失败,因为这里没有身份验证集
>>>rsa_key=client.get_transport().get_remote_server_key()
#然而,这仍然存在
>>>rsa_key.get_base64()
u'AAAAB3NzaC1y…Nhd'
由于您已经在使用paramiko,您可能只想停止使用rsa_密钥,而不想使用get_base64()创建一个新密钥,因为rsa_密钥已经是RSAKey类型
服务器也可以定义一个非RSA密钥(或多个),但如果您知道它只返回RSA,显然它总是返回RSA。这将取决于协商的密钥。您可以从服务器本身检索服务器的公钥,而无需向服务器进行身份验证
import paramiko
import socket
import sys
for arg in sys.argv[1:]:
sock = socket.socket()
sock.connect((arg, 22))
trans = paramiko.transport.Transport(sock)
trans.start_client()
k = trans.get_remote_server_key()
# On my machine, this returns a paramiko.RSAKey
print k.get_base64()
这将显示指纹,但不显示密钥--它基于密钥,但不是密钥。我认为您可能要使用arg来决定连接到哪个服务器,而不是静态连接到localhost。当我将其放入代码中时,它似乎完全跳过了至少print语句,甚至可能更多。然后继续调用
key=paramiko.RSAKey(data=base64.decodestring(k.get_base64())
@phoenix1)上的错误。我怀疑您在程序中包含了for
语句。for语句对这个非常短的程序的命令行参数进行迭代。你可能不想那样。删除行的,并相应调整缩进。2) 你提到的作业行写得更简单:key=k
。如果我删除
行的,你建议我如何处理这行:sock.connect((arg,22))
@phoenix-rising-将arg
替换为服务器的名称或IP地址。我很想知道为什么需要ssh服务器的主机密钥。在上面的代码段中,您打算如何处理键
?您能帮我找出为什么会出现此错误'NoneType'对象没有属性“get\u remote\u server\u key”
这意味着client.get\u transport()没有使用传输对象响应。很可能,这意味着client.connect失败——在这种情况下,它会引发异常。