Pexpect ssh选项StrictHostKeyChecking引发TypeError

时间:2015-06-01 08:53:35

标签: python python-2.7 ssh pexpect

我有一个使用pexpect模块ssh到设备的python脚本。它基本上运行以下

$ ssh hostname -l username

做:

>>> import pexpect.pxssh as pxssh
>>> conn = pxssh.pxssh()
>>> conn.login(hostname, username, password, terminal_type='vt100')
>>> ...

现在,我正在尝试使用StrictHostKeyChecking=no选项实现相同的脚本。为此,我按照pexpect的{​​{3}}添加options={},如下所示。但是,它会引发以下TypeError

>>> import pexpect.pxssh as pxssh
>>> conn = pxssh.pxssh(options={'StrictHostKeyChecking':'no',})
Exception AttributeError: "'pxssh' object has no attribute 'closed'" in <bound method pxssh.__del__ of <pexpect.pxssh.pxssh object at 0x7f96294aded0>> ignored
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() got an unexpected keyword argument 'options'

我环顾四周,找不到解决这个问题的方法。这是一个已知的问题,如果是,是否有任何黑客攻击?

我的设置如下:

>>> print pexpect.__version__
3.1

似乎是最后一个版本

$ apt-cache policy python-pexpect
python-pexpect:
  Installed: 3.1-1ubuntu0.1
  Candidate: 3.1-1ubuntu0.1

1 个答案:

答案 0 :(得分:0)

在当前的pexpect版本中,传递ssh config选项的操作如文档所述。

例如,以下代码可与pexpect-4.3(使用Python 3.6 / Linux)配合使用:

s = pxssh.pxssh(options={
    'StrictHostKeyChecking': 'yes',
    'HostKeyAlgorithms': 'ssh-ed25519',
    'UserKnownHostsFile': 'known-horsts',
    },
    timeout=3)
s.login('example.org', 'juser')