Python Twisted:Twisted conch filetransfer verifyHostKey
我在这里使用sftp示例: 我用这个来连接。因此,我可以使用字符串中的密钥,而不是密码或~/.shh中的密钥。现在,我希望传递一个hostkey或来自hostkey的指纹,以避免提示用户验证hostkeyPython Twisted:Twisted conch filetransfer verifyHostKey,python,twisted,sftp,Python,Twisted,Sftp,我在这里使用sftp示例: 我用这个来连接。因此,我可以使用字符串中的密钥,而不是密码或~/.shh中的密钥。现在,我希望传递一个hostkey或来自hostkey的指纹,以避免提示用户验证hostkey def sftp(user, host, port, key, hostkey): options = ClientOptions() options['key'] = keys.Key.fromString(key.strip()).keyObject options
def sftp(user, host, port, key, hostkey):
options = ClientOptions()
options['key'] = keys.Key.fromString(key.strip()).keyObject
options['host'] = host
options['port'] = port
conn = SFTPConnection()
conn._sftp = Deferred()
auth = SSHUserAuthClient(user, options, conn)
connect(host, port, options, verifyHostKey, auth)
return conn._sftp
我试图为verifyHostkey提供一些参数,正如您在中看到的,它没有使用参数指纹,并且我还没有找到有效的传输值
def verifyHostKey(transport, host, pubKey, fingerprint):
"""
Verify a host's key.
....
你知道我如何忽略提示用户验证主机密钥而不将主机密钥写入~/.shh/known_hosts吗
好的,我根据Jean-Paul Calderone的答案写了一个函数。我很天真,但做得很好。目标是省去对已知主机文件的需要。我希望所有的钥匙都留在记忆中
def verifyHostKey(transport, host, pubKey, fingerprint):
keytype, key = transport.factory.options['hostkey'].split(" ")[1:]
hostkey = keytype + " " + key
key = Key.fromString(hostkey)
if key.fingerprint() == fingerprint:
return succeed(True)
else:
raise BadKeyError
我试图为验证hostkey提供一些参数
你是说你自己试着打电话给verifyHostKey
?听起来这并不能帮助您避免提示用户输入未知的主机密钥。相反,您希望将该参数的不同函数传递给connect
。不要使用twisted.conch.client.default提供的verifyHostKey
函数,而是使用类似以下的函数:
from twisted.internet.defer import succeed
def verifyHostKey(transport, host, pubKey, fingerprint):
return succeed(True)
或者,如果您想实现自己的检查,而不仅仅是接受任何主机密钥,那么可以定义一个包含该检查的函数。返回一个延迟,如果检查成功,则使用True触发延迟。如果检查失败,则使用False进行激发
我试图为验证hostkey提供一些参数
你是说你自己试着打电话给verifyHostKey
?听起来这并不能帮助您避免提示用户输入未知的主机密钥。相反,您希望将该参数的不同函数传递给connect
。不要使用twisted.conch.client.default提供的verifyHostKey
函数,而是使用类似以下的函数:
from twisted.internet.defer import succeed
def verifyHostKey(transport, host, pubKey, fingerprint):
return succeed(True)
或者,如果您想实现自己的检查,而不仅仅是接受任何主机密钥,那么可以定义一个包含该检查的函数。返回一个延迟,如果检查成功,则使用True触发延迟。如果检查失败,则使用False启动。谢谢,我刚刚按照您的建议实现了自己的功能。现在对我来说工作很好。谢谢,我只是按照你的建议实现了我自己的功能。我现在工作很好。