Python-Pexpect模块pxssh遇到连接不成功的问题

本文介绍了一种在使用Python的pxssh模块进行SSH连接时遇到的超时问题及解决方案。通过在关键代码前增加发送空命令和短暂延迟,成功解决了连接超时的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在linux上运行ssh连接脚本如下:

#!/usr/bin/python

import pxssh

import getpass

try:

        s = pxssh.pxssh()

        hostname=raw_input('hostname: ')

        username=raw_input('username: ')

        password=raw_input('password: ')

        s.login(hostname,username,password)

        s.sendline('uptime')

        s.prompt()

        print s.before

        s.sendline('ll')

        s.prompt()

        print s.before

        s.sendline('df -hl')

        s.prompt()

        print s.before

        s.logout()

except pxssh.ExceptionPxssh, e:

        print "pxssh failed on login"

        print str(e)

 

报错信息如下:

[root@agent02 studyPython]# ./test1.py

hostname: 192.168.107.80

username: oss

password: XXXX

Traceback (most recent call last):

  File "./test1.py", line 9, in

    s.login(hostname,username,password)

  File "/usr/lib/python2.6/site-packages/pxssh.py", line 243, in login

    if not self.synch_original_prompt():

  File "/usr/lib/python2.6/site-packages/pxssh.py", line 134, in synch_original_prompt

    self.read_nonblocking(size=10000,timeout=1) # GAS: Clear out the cache before getting the prompt

  File "/usr/lib/python2.6/site-packages/pexpect.py", line 824, in read_nonblocking

    raise TIMEOUT ('Timeout exceeded in read_nonblocking().')

pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().

[root@agent02 studyPython]# find / -name pxssh.py

/usr/local/rx/pexpect/pexpect-2.3/pxssh.py

/usr/local/rx/pexpect/pexpect-2.3/build/lib/pxssh.py

/usr/lib/python2.6/site-packages/pxssh.py

 

解决办法:

[root@agent02 studyPython]# find / -name pxssh.py

/usr/local/rx/pexpect/pexpect-2.3/pxssh.py

/usr/local/rx/pexpect/pexpect-2.3/build/lib/pxssh.py

/usr/lib/python2.6/site-packages/pxssh.py

修改/usr/lib/python2.6/site-packages/pxssh.py,

在def synch_original_prompt (self):方法下第一个self.read_nonblocking(size=10000,timeout=1)前面增加两行代码:self.sendline()

 time.sleep(0.5)

修改以后,可以正常工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值