【问题标题】:Python Twisted: twisted conch filetransfer verifyHostKeyPython Twisted:扭曲的海螺文件传输 verifyHostKey
【发布时间】: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

【问题讨论】:

    标签: python twisted sftp


    【解决方案1】:

    我试图给 verifyHostkey 一些论据

    您是说您尝试自己拨打verifyHostKey 吗?听起来这并不能帮助您避免提示用户输入未知的主机密钥。相反,您想将该参数的不同函数传递给connect。不要使用twisted.conch.client.default 提供的verifyHostKey 函数,而是使用这样的函数:

    from twisted.internet.defer import succeed
    
    def verifyHostKey(transport, host, pubKey, fingerprint):
        return succeed(True)
    

    或者,如果您想实现自己的检查,而不仅仅是接受任何主机密钥,请定义一个包含该检查的函数。返回一个 Deferred,如果检查成功,则使用 True 触发该 Deferred。如果检查失败,则使用 False 触发它。

    【讨论】:

    • 谢谢,我刚刚按照您的建议实现了自己的功能。现在对我来说工作得很好。
    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多