微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

paramiko-expect 更改密码

如何解决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 举报,一经查实,本站将立刻删除。