如何解决paramiko-expect 更改密码
我有几个运行 OpenWRT 的路由器,我想使用 paramiko 用 python 脚本配置它们。由于 Linux 上的“passwd”命令需要用户输入,因此我使用 paramiko-expect 来处理交互。更改主机本身的密码如下所示:
root@host1:~# passwd
Changing password for root
New password: new_password
Retype password: new_password
passwd: password for root changed by root
我的python脚本如下
import paramiko
from paramiko_expect import SSHClientInteraction
try:
with paramiko.SSHClient() as ssh:
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.1',22,'root','old_password')
with SSHClientInteraction(ssh,timeout=10,display=True) as interact:
interact.expect('.*root.*') # expecting root@host1:~
interact.send('passwd')
interact.expect(['.*password.*','.*password.*']) # expect multiline output both containing the phrase 'password'
interact.send('new_password')
interact.expect('.*password.*') # expect 'Retype password: '
interact.send('new_password')
except Exception as e:
print(e)
脚本运行没有错误,但我仍然可以使用“old_password”登录,因此密码没有更改。我本地终端上的输出看起来像:
BusyBox v1.30.1 () built-in shell (ash)
Welcome to OpenWRT
root@host1:~# passwd
Changing password for root
New password:
Retype password:
我试过一个简单的
interact.send('ls>test')
有趣的是,文件 test 已创建但它没有内容(在 host1 本身上执行时包含多个文件)。同样的情况发生在
interact.send('ip a>test')
有趣的是 pwd> 测试工作正常,当前目录被添加到测试文件中。有人知道问题是什么或我如何正确调试吗?
paramiko 2.7.2
paramiko-expect 0.3.0
Python 3.8.5
我用来执行 python 脚本的终端:platformio-ide-terminal addon for atom 2.10.1
问候伊恩
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。