【发布时间】:2011-07-24 08:47:40
【问题描述】:
我在这里玩 sftp 示例:Stackoverflow: twisted conch filetransfer
我在这里使用它来连接。所以我可以使用字符串中的密钥而不是密码或 ~/.shh 中的密钥。现在我想从主机密钥传递主机密钥或指纹,以避免提示用户验证主机密钥
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 提供一些参数,正如您在 source 中看到的那样,未使用参数指纹,我还没有找到有效的传输值。
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
【问题讨论】: