Python 被pxssh卡住了。它没有';在第一次成功登录后是否再次登录?

Python 被pxssh卡住了。它没有';在第一次成功登录后是否再次登录?,python,python-2.7,ssh,pexpect,pxssh,Python,Python 2.7,Ssh,Pexpect,Pxssh,我正在使用pxssh进行简单的ssh登录。以下是烹饪书中的T.J.康纳脚本 我能够使用pxssh成功地进入远程机器,并在尝试从python解释器传递命令。 下面是视图 >>> from pexpect import pxssh >>> s = pxssh.pxssh() >>> s.login("192.168.1.107", "shineesh", "password123") True >>> s <pexpect

我正在使用pxssh进行简单的ssh登录。以下是烹饪书中的T.J.康纳脚本

我能够使用pxssh成功地进入远程机器,并在尝试从python解释器传递命令。 下面是视图

>>> from pexpect import pxssh
>>> s = pxssh.pxssh()
>>> s.login("192.168.1.107", "shineesh", "password123")
True
>>> s
<pexpect.pxssh.pxssh object at 0xb72d772c>
>>> s.sendline("ifconfig")
9
>>> s.prompt()
True
>>> print s.before
ifconfig
eth0      Link encap:Ethernet  HWaddr 3X:XX:XX:XX:XX:X4  
      UP BROADCAST MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
-----输出低于--------------


接着是来自的一些线程/引用

http://stackoverflow.com/questions/24919980/pxssh-throwing-end-of-file-eof-exception-style-platform-exception
http://pexpect.sourceforge.net/doc/
----------新剧本--------------

-------输出-------------



我哪里出了问题?

在阅读了大量示例/文章后,终于找到了阻止pxssh成功登录的原因

pxssh中的connect()方法默认采用“login\u timeout=10”。在这里,SSH登录到远程机器的时间超过了10秒,因此login()引发了ExceptionPxssh异常。该异常具有误导性,因为它说“pexpect.exceptions.EOF:End-Of-File(EOF).exception-style-platform”

不管怎样,只要设置login_timeout=15,pxssh脚本就可以通过。下面是解决方案代码



#! /usr/bin/python -tt
from pexpect import pxssh
import pexpect

def send_commands(s, command):
    s.sendline(command)
    s.prompt(pexpect.EOF)
    print s.before
def connect(host, username, password):
    try:
            child = pxssh.pxssh()
            child.login(host, username, password)
            return child
    except Exception, e:
            print "[-] Error Connecting\n" +  str(e)
            exit(0)

def main():

    s = connect('192.168.1.107', 'shineesh', 'password123')
    send_commands(s, 'ifconfig')

if __name__ == '__main__':
    main()
[-] Error Connecting
End Of File (EOF). Exception style platform.
http://stackoverflow.com/questions/24919980/pxssh-throwing-end-of-file-eof-exception-style-platform-exception
http://pexpect.sourceforge.net/doc/
#! /usr/bin/python -tt
from pexpect import pxssh
import pexpect

def send_commands(s, command):
    s.sendline(command)
    s.prompt(pexpect.EOF)
    print s.before
def connect(host, username, password):
    try:
            child = pxssh.pxssh()
            child.login(host, username, password)
            child.expect(pexpect.EOF, timeout=None)
            return child
    except Exception, e:
            print "[-] Error Connecting\n" +  str(e)
            exit(0)

def main():

    s = connect('192.168.1.107', 'shineesh', 'password123')
    send_commands(s, 'ls -all')

if __name__ == '__main__':
    main()
[-] Error Connecting
End Of File (EOF). Exception style platform.
#! /usr/bin/python -tt
from pexpect import pxssh

def send_commands(s, command):
    s.sendline(command)
    s.prompt()
    print s.before
def connect(host, username, password):
    try:
            child = pxssh.pxssh()
            child.login(host, username, password, login_timeout=15)
            return child
    except pxssh.ExceptionPxssh, e:
            print "[-] Error Connecting\n" +  str(e)
            exit(0)
def main():

    s = connect('192.168.1.107', 'shineesh', 'password123')
    send_commands(s, 'ifconfig')

if __name__ == '__main__':
    main()