概覽
這篇文章how-to-use-the-pexpect-module-in-python介紹了Python中的pexpect
模塊,基於該模塊可以做ssh、ftp等的自動化鏈接。
基於pexpect我們構建了pxssh
類。使用pxssh模塊,很容易通過ssh連接到其他服務器。
本文基於此處的官方文檔:
http://pexpect.sourceforge.net/pxssh.html
什麽是pxssh?
Pxssh基於pexpect。它的類擴展了pexpect.spawn以專門設置SSH連接。pxssh簡單易用,我經常使用pxssh在python中進行ssh連接。
模塊文檔
打開終端並輸入以下命令以獲取有關該模塊的幫助。
import pxssh help(pxssh) Help on module pxssh: NAME pxssh FILE /usr/lib/python2.7/dist-packages/pxssh.py DESCRIPTION This class extends pexpect.spawn to specialize setting up SSH connections. This adds methods for login, logout, and expecting the shell prompt. $Id: pxssh.py 513 2008-02-09 18:26:13Z noah $ CLASSES pexpect.ExceptionPexpect(exceptions.Exception) ExceptionPxssh pexpect.spawn(__builtin__.object) pxssh
你也可以在這裏看到幫助 http://pexpect.sourceforge.net/pxssh.html
方法和登錄過程
Pxssh添加了登錄、注銷和等待shell提示的方法。
它做了各種棘手的事情以便在SSH登錄過程中處理許多情況。
例如,如果會話是您的第一次登錄,則pxssh會自動接受遠程證書;或者如果你有公鑰認證設置,那麽pxssh將不會等待密碼提示。
pxssh如何工作?
為了使其更加健壯,它將shell提示設置為比$或#更獨特的東西。這適用於大多數Borne / Bash或Csh樣式的shell。
示例
此示例在遠程服務器上運行一些命令並打印結果。
首先,我們導入我們需要的模塊。 (pxssh和getpass)
我們導入getpass模塊,它會提示用戶輸入密碼,而不會回顯他們鍵入控製台的內容。
import pxssh
import getpass
try:
s = pxssh.pxssh()
hostname = raw_input('hostname: ')
username = raw_input('username: ')
password = getpass.getpass('password: ')
s.login (hostname, username, password)
s.sendline ('uptime') # run a command
s.prompt() # match the prompt
print s.before # print everything before the prompt.
s.sendline ('ls -l')
s.prompt()
print s.before
s.sendline ('df')
s.prompt()
print s.before
s.logout()
except pxssh.ExceptionPxssh, e:
print "pxssh failed on login."
print str(e)
在遠程SSH服務器上運行命令
讓我們再舉一個例子。要運行命令(’uptime’)並打印輸出,您需要執行以下操作:
import pxssh
s = pxssh.pxssh()
if not s.login ('localhost', 'myusername', 'mypassword'):
print "SSH session failed on login."
print str(s)
else:
print "SSH session login successful"
s.sendline ('uptime')
s.prompt() # match the prompt
print s.before # print everything before the prompt.
s.logout()
#We can also execute multiple command like this:
s.sendline ('uptime;df -h')
想要了解pxssh的更多信息, 請閱讀官方文檔