python - paramiko的安裝與使用

一:簡介python

paramiko是用python語言寫的一個模塊,遵循SSH2協議,支持以加密和認證的方式,進行遠程服務器的鏈接。linux

因爲使用的是python這樣的可以跨平臺運行的語言,因此全部python支持的平臺,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko均可以支持,所以,若是須要使用SSH從一個平臺鏈接到另一個平臺,進行一系列的操做時,paramiko是最佳工具之一。windows

舉個常見的例子,現有這樣的需求:須要使用windows客戶端,遠程鏈接到Linux服務器,查看上面的日誌狀態,你們一般使用的方法會是:服務器

1:用telnet網絡

2:用PUTTYssh

3:用WinSCP工具

4:用XManager等…測試

那如今若是需求又增長一條,要從服務器上下載文件,該怎麼辦?那經常使用的辦法可能會是:ui

1:Linux上安裝FTP並配置加密

2:Linux上安裝Sambe並配置…

你們會發現,常見的解決方法都會須要對遠程服務器必要的配置,若是遠程服務器只有一兩臺還好說,若是有N臺,還須要逐臺進行配置,或者須要使用代碼進行以上操做時,上面的辦法就不太方便了。

使用paramiko能夠很好的解決以上問題,比起前面的方法,它僅須要在本地上安裝相應的軟件(python以及PyCrypto),對遠程服務器沒有配置要求,對於鏈接多臺服務器,進行復雜的鏈接操做特別有幫助。

 

二:安裝

安裝paramiko有兩個先決條件,python和另一個名爲PyCrypto的模塊。

一般安裝標準的python模塊,只須要在模塊的根目錄下運行:

python setup.py build

python setup.py install

以上兩條命令便可,paramiko和PyCrypto也不例外,惟一麻煩的就是安裝PyCrypto時,須要GCC庫編譯,若是沒有GCC庫會報錯,會致使PyCrypto以及paramiko沒法安裝。

如下以32 位的windows XP爲例,說明paramiko的安裝過程

 

1:安裝python,2.2以上版本均可以,我使用的是2.5,安裝過程略,並假設安裝目錄是c:\python。

 

2:判斷本地是否安裝了GCC,並在PATH變量能夠找到,若是沒有,可以使用windows 版的GCC,即MinGW,下載地址:http://sourceforge.net/projects/mingw/,而後運行下載後的exe文件進行網絡安裝,假設目錄爲C:\mingw,在PATH中加入 C:\mingw\bin,並在c:\python\lib\distutils下新建一個名稱是distutils.cfg的文件,填入:

[build] 
compiler=mingw32

 

3:下載PyCrypto ,地址是

https://www.dlitz.net/software/pycrypto/

安裝PyCrypto:

  • 解壓縮

  • 在dos下進入解壓縮的目錄,運行

C:\python\python.exe setup.py build

C:\python\python.exe setup.py install

 

  • 安裝測試

  運行python.exe,在提示符下輸入:

Import  Crypto

  若是沒有出現錯誤提示,說明Crypto安裝成功

 

4:下載paramiko,地址是http://www.lag.net/paramiko/

  • 解壓縮

  • 在dos下進 入解壓縮的目錄,運行

C:\python\python.exe setup.py build

C:\python\python.exe setup.py install
  • 測試paramiko

  運行python.exe,在提示符下輸入:

Import  paramiko

  若是沒有出現錯誤提示,說明paramiko安裝成功

 

三: 使用paramiko

 

若是你們感受安裝paramiko仍是略有麻煩的話,當使用到paramiko提供的方便時便會以爲這是十分值得的。

下面是兩種使用paramiko鏈接到linux服務器的代碼

方式一:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(,22,, )

上面的第二行代碼的做用是容許鏈接不在know_hosts文件中的主機。

 

方式二:

t = paramiko.Transport((「主機」,」端口」))
t.connect(username = 「用戶名」, password = 「口令」)

若是鏈接遠程主機須要提供密鑰,上面第二行代碼可改爲:

t.connect(username = 「用戶名」, password = 「口令」, hostkey=」密鑰」)

 

下面給出實際的例子:

3.1 windows對linux運行任意命令,並將結果輸出

若是linux服務器開放了22端口,在windows端,咱們可使用paramiko遠程鏈接到該服務器,並執行任意命令,而後經過 print或其它方式獲得該結果,

代碼以下:

複製代碼

 paramiko
 
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(,22,, )
stdin, stdout, stderr = ssh.exec_command() stdout.readlines()
ssh.close()

複製代碼

其中的」你的命令」能夠任意linux支持的命令,如一些經常使用的命令:

複製代碼

df:查看磁盤使用狀況
uptime:顯示系統運行時間信息
cat:顯示某文件內容
mv/cp///sbin/service/ xxxservice /stop/restart:啓動、中止、重啓某服務
netstat -ntl |grep 8080:查看8080端口的使用狀況 
 或者 nc -zv localhost :查看全部端口的使用狀況  / -name XXX:查找某文件
...

複製代碼

這樣一來,對於linux的任何操做幾乎均可以經過windows端完成,若是對該功能進行引伸,還能夠同時管理多臺服務器。

 

3.2 從widnows端下載linux服務器上的文件

複製代碼

 paramiko
 
t = paramiko.Transport((「主機」,」端口」))
t.connect(username = 「用戶名」, password = 「口令」)
sftp = paramiko.SFTPClient.from_transport(t)
remotepath=’/var/log/system.log’
localpath=’/tmp/system.log’
sftp.get(remotepath, localpath)
t.close()

複製代碼

 

3.3 從widnows端上傳文件到linux服務器

複製代碼

 paramiko

t = paramiko.Transport((「主機」,」端口」))
t.connect(username = 「用戶名」, password = 「口令」)
sftp = paramiko.SFTPClient.from_transport(t)
remotepath=’/var/log/system.log’
localpath=’/tmp/system.log’
sftp.put(localpath,remotepath)
t.close()

複製代碼

我對paramiko的使用也剛剛開始,以上如有不對的地方,敬請你們指正!先謝了!

相關文章
相關標籤/搜索