Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取base 64中ssh服务器的主机密钥_Python_Macos_Ssh_Terminal_Paramiko - Fatal编程技术网

Python 获取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 >&

我正在使用paramiko,我需要base 64中ssh服务器的主机密钥,用于以下行:

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失败——在这种情况下,它会引发异常。