使用 Python3 ncclient/paramiko 时出错?

Error using Python3 ncclient/paramiko?

我目前正在阅读 Eric Chou(我是一名网络工程师)的一本名为《精通 Python 网络》的书。

其中一个示例提供了使用 netconf 连接到 Cisco Nexus 设备的示例代码,但在尝试连接时我收到以下与以下相关的错误:

AttributeError: '_RSAPublicKey' object has no attribute 'verify'

谁能告诉我可能是什么问题。

我在 Ubuntu 16.04 LTS 上安装了最新版本的 Python3,并按照书中的说明下载并安装了最新版本的 ncclient。

顺便说一句,我正在连接到 Cisco Devnet Nexus NX-API 沙盒模拟器,使用下面代码中显示的凭据的手动 ssh 终端连接也可以正常工作。

根据 运行 以下代码:

from ncclient import manager
conn=manager.connect(
 host='sbx-nxos-mgmt.cisco.com',
 port=8181,
 username='admin',
 password='Admin_1234!',
 hostkey_verify=False,
 device_params={'name': 'nexus'},
 look_for_keys=False
)

我收到以下错误:

Unknown exception: '_RSAPublicKey' object has no attribute 'verify' Traceback (most recent call last): File "/usr/local/lib/python3.5/dist-packages/paramiko/transport.py", line 1925, in run self.kex_engine.parse_next(ptype, m) File "/usr/local/lib/python3.5/dist-packages/paramiko/kex_ecdh_nist.py", line 47, in parse_next return self._parse_kexecdh_reply(m) File "/usr/local/lib/python3.5/dist-packages/paramiko/kex_ecdh_nist.py", line 107, in _parse_kexecdh_reply self.transport._verify_key(K_S, sig) File "/usr/local/lib/python3.5/dist-packages/paramiko/transport.py", line 1750, in _verify_key if not key.verify_ssh_sig(self.H, Message(sig)): File "/usr/local/lib/python3.5/dist-packages/paramiko/rsakey.py", line 127, in verify_ssh_sig key.verify( AttributeError: '_RSAPublicKey' object has no attribute 'verify'

Traceback (most recent call last): File "", line 8, in File "/usr/local/lib/python3.5/dist-packages/ncclient-0.5.3-py3.5.egg/ncclient/manager.py", line 155, in connect File "/usr/local/lib/python3.5/dist-packages/ncclient-0.5.3-py3.5.egg/ncclient/manager.py", line 120, in connect_ssh File "/usr/local/lib/python3.5/dist-packages/ncclient-0.5.3-py3.5.egg/ncclient/transport/ssh.py", line 409, in connect File "/usr/local/lib/python3.5/dist-packages/paramiko/transport.py", line 545, in start_client raise e File "/usr/local/lib/python3.5/dist-packages/paramiko/transport.py", line 1925, in run self.kex_engine.parse_next(ptype, m) File "/usr/local/lib/python3.5/dist-packages/paramiko/kex_ecdh_nist.py", line 47, in parse_next return self._parse_kexecdh_reply(m) File "/usr/local/lib/python3.5/dist-packages/paramiko/kex_ecdh_nist.py", line 107, in _parse_kexecdh_reply self.transport._verify_key(K_S, sig) File "/usr/local/lib/python3.5/dist-packages/paramiko/transport.py", line 1750, in _verify_key if not key.verify_ssh_sig(self.H, Message(sig)): File "/usr/local/lib/python3.5/dist-packages/paramiko/rsakey.py", line 127, in verify_ssh_sig key.verify( AttributeError: '_RSAPublicKey' object has no attribute 'verify'

更新:

我还联系了我正在使用的书的作者 (Eric Chou (Mastering Python Networking))。 Eric 亲切地回复了他复制代码的步骤以及他还在 Ubuntu 主机上安装的相关依赖项。

一旦我也(重新)在我的 Ubuntu 主机上安装了相同的 packages/dependencies 列表,代码 worked/error 就被清除了,所以我肯定遗漏了以下一项或多项.

如果有人遇到类似情况,我会采取以下步骤来修复我看到的错误:

sudo apt-get install -y python3-dev libxml2-dev libxslt1-dev libffi-dev libssl-dev zlib1g-dev python3-pip git python3-requests
cd ncclient/
ncclient$ sudo python3 setup.py install

只是上次更新的后续说明,目录 ncclient 是从以下 git 存储库克隆的:

$ git clone https://github.com/ncclient/ncclient
$ cd ncclient/
$ sudo python3 setup.py install

Cisco 客户端脚本可以在 github repo 书上看到,https://github.com/PacktPublishing/Mastering-Python-Networking/blob/master/Chapter03/Cisco/cisco_nxapi_1.py

埃里克