2011-03-28 128 views
0

我与SFTP例如玩弄从这里:Stackoverflow: twisted conch filetransferPython的扭曲:扭曲海螺文件传输verifyHostKey

我用这这里进行连接。所以我可以使用字符串中的密钥而不是密码或〜/ .shh中的键。现在,我想从一个hostkey交付hostkey或指纹,以避免提示用户验证hostkey

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. 
    .... 

任何想法如何,我可以省略用户被提示验证hostkey不写入hostkey到〜/ .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 

回答

3

我试着给一些参数verifyHostkey

你是说你打过电话verifyHostKey自己吗?这听起来不会帮助您避免提示用户输入未知的主机密钥。相反,您希望将该参数的另一个功能传递给connect。而不是使用twisted.conch.client.default提供的verifyHostKey功能,使用一个像这样:

from twisted.internet.defer import succeed 

def verifyHostKey(transport, host, pubKey, fingerprint): 
    return succeed(True) 

或者,如果你想实现自己的检查,不只是接受任何主机密钥,定义有检查它的功能。返回Deferred,如果检查成功,则触发Deferred with True。如果检查失败,用False开火。

+0

谢谢,我只是按照你的建议实现了我自己的功能。现在为我工作得很好。 – daccle 2011-03-29 09:33:56