當前位置: 首頁>>編程語言>>正文


使用Python進行SSH連接

概覽

這篇文章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的更多信息, 請閱讀官方文檔

 

python ssh

參考資料

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/3917.html,未經允許,請勿轉載。