2014-01-10 120 views
1

所以我已經嘗試了幾個模塊pxssh,pexpect等,我似乎無法獲得ssh連接到我們的ssh代理工作。基本上我想做的是使用我們的SSH代理,它可以訪問我們其餘的設備作爲其他設備的跳轉點,然後運行命令。這工作在ipython中,但是當它連接時會引發下面列出的異常,但是它繼續執行其餘的命令並且工作正常。但是,當只是作爲python腳本運行時,它只會導致腳本失敗。由於例外,我認爲這是失敗的。有沒有辦法關閉這個例外,或者避免這種例外?還是我這樣做全錯了?pxssh連接到一個ssh代理; read_nonblocking()中超時超時

我也試圖與提示設置和auto_prompt_reset設置搞亂......

代理主機是不是一個真正的Linux主機,或Cisco對於這個問題,這可能是爲什麼違約設置不工作。

不確定該從哪裏出發,所以任何幫助或見解都會很棒。

import pxssh 
s = pxssh.pxssh() 
hostname = '10.10.10.4' 
username = 'username' 
password = 'password!' 
s.login (hostname, username, password) 
s.sendline ('connect 10.10.5.1') 
s.prompt(timeout=2)  
print s.before 
s.endline ('') 
s.sendline ('show run') 
s.prompt(timeout=2) 
print s.before 

發佈的異常。

In [40]: s.login (hostname, username, password) 
--------------------------------------------------------------------------- 
TIMEOUT         Traceback (most recent call last) 
<ipython-input-40-51f00f2075f5> in <module>() 
----> 1 s.login (hostname, username, password) 

/usr/lib/python2.7/dist-packages/pxssh.pyc in login(self, server, username, password, terminal_type, original_prompt, login_timeout, port, auto_prompt_reset) 
    241    self.close() 
    242    raise ExceptionPxssh ('unexpected login response') 
--> 243   if not self.synch_original_prompt(): 
    244    self.close() 
    245    raise ExceptionPxssh ('could not synchronize with original prompt') 

/usr/lib/python2.7/dist-packages/pxssh.pyc in synch_original_prompt(self) 
    132   # If latency is worse than these values then this will fail. 
    133 
--> 134   self.read_nonblocking(size=10000,timeout=1) # GAS: Clear out the cache  before getting the prompt 
    135   time.sleep(0.1) 
    136   self.sendline() 

/usr/lib/python2.7/dist-packages/pexpect.pyc in read_nonblocking(self, size, timeout) 
    822     raise EOF ('End of File (EOF) in read_nonblocking(). Very pokey  platform.') 
    823    else: 
--> 824     raise TIMEOUT ('Timeout exceeded in read_nonblocking().') 
    825 
    826   if self.child_fd in r: 

TIMEOUT: Timeout exceeded in read_nonblocking(). 

回答

3

研究這個爲自己之後,我碰到#2的另一篇文章中,提問者發佈他們的解決方案。我測試瞭解決方案,並且它也適用於我自己。這個問題是usr/lib/python.2.6/dist-packages/pxssh.py中過時/缺少的代碼片段。 (它也可能在usr/lib/python.2.6/site-packages/pxssh.py中)。

導航到該文件,並添加以下代碼行:

self.sendline() #Line 134 
time.sleep(0.5) #Line 135 

這應該只是上面一行

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

和中提琴被插入,再次運行你的代碼,它應該像魅力。 貸:python pexpect: SSHing then updating the date