【Python之旅】第六篇(一):Paramiko模塊使用演示

    在第五篇的最後原本還應該有個ftp軟件開發的做業的,但對比本身寫的和師兄寫的,感受本身寫的太爛了,因此就不上傳了,等之後技術學好些再開發些小工具吧,如今還差好遠,還得很是很是努力啊!
html

    先說Paramiko模塊是爲了之後作監控軟件的開發作準備,因此這裏先說用Paramiko模塊鏈接遠程主機,再介紹用Paramiko模塊做遠程文件傳送。
python

    主要內容是下面幾項:
ssh

1.Paramiko SSH鏈接遠程主機
(1)使用用戶名密碼鏈接遠程主機
(2)使用key鏈接遠程主機
2.Paramiko SFTP傳送文件

    Paramiko模塊是第三方庫,因此須要先進行安裝,安裝的過程能夠看一位網友的文章http://www.cnblogs.com/xia520pi/p/3805043.html,這裏就不做記錄了。ide


1.Paramiko SSH鏈接遠程主機工具

(1)使用用戶名密碼鏈接遠程主機    加密

    程序代碼及註釋以下:
spa

#!/usr/bin/env python

import paramiko    #導入paramiko模塊
import sys,os

host = sys.argv[1] #經過sys下的argv來獲取命令行的輸入,這裏爲獲取命令的第一個參數
user = 'oldboy'    #須要鏈接的遠程主機的用戶名
password = '123456'    #須要鏈接的遠程主機的密碼

cmd = sys.argv[2]  #經過sys下的argv來獲取命令行的輸入,這裏爲獲取命令的第二個參數 

s = paramiko.SSHClient()    #調用paramiko模塊下的SSHClient()
s.load_system_host_keys()   #加載本地的known_hosts文件,該文件是紀錄連到對方時,對方給的 host key。每次連線時都會檢查目前對方給的 host key 與紀錄的 host key 是否相同,能夠簡單驗證連結是否又被詐騙等相關事宜。

s.set_missing_host_key_policy(paramiko.AutoAddPolicy())  #加上這句話不用擔憂選yes的問題,會自動選上(用ssh鏈接遠程主機時,第一次鏈接時會提示是否繼續進行遠程鏈接,選擇yes)

s.connect(host,22,user,password,timeout=5)    #鏈接遠程主機,SSH端口號爲22
stdin,stdout,stderr=s.exec_command(cmd)       #執行命令

cmd_result = stdout.read(),stderr.read()      #讀取命令結果,讀取命令結果時,一個是空,一個不是空,有錯就不會有結果,有結果就沒錯。

for line in cmd_result:
	print line,

s.close()

    關於sys.argv[]方法的使用,能夠看這裏:http://xpleaf.blog.51cto.com/9315560/1700811命令行

    下面演示一下執行結果,這裏我有一臺同網段的主機,IP地址爲:192.168.1.124,以下:
htm

root@xpleaf-machine:/mnt/hgfs/Python/day6# python ssh1.py 192.168.1.124 df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda3        9602276 3538300   5576196  39% /
tmpfs             959228       0    959228   0% /dev/shm
/dev/sda1         198337   34143    153954  19% /boot

root@xpleaf-machine:/mnt/hgfs/Python/day6# python ssh1.py 192.168.1.124 'df -h'
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       9.2G  3.4G  5.4G  39% /
tmpfs           937M     0  937M   0% /dev/shm
/dev/sda1       194M   34M  151M  19% /boot

    返回的數據便是遠程主機的命令執行結果。
blog


(2)使用key鏈接遠程主機

    與(1)並無多大區別,只是認證方式爲使用key,所以代碼中不須要寫密碼,先給出代碼及註釋:

#!/usr/bin/env python

import paramiko
import sys,os

host = sys.argv[1]
user = 'oldboy'

pkey_file = '/home/xpleaf/.ssh/id_rsa'	#指定用來解密的私鑰的路徑,這個須要手動生成,下面會講如何生成
key = paramiko.RSAKey.from_private_key_file(pkey_file)    #使用私鑰解密

cmd = sys.argv[2]

s = paramiko.SSHClient()
s.load_system_host_keys()

s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

s.connect(host,22,user,pkey=key,timeout=5)
stdin,stdout,stderr=s.exec_command(cmd)

cmd_result = stdout.read(),stderr.read()

for line in cmd_result:
	print line,

s.close()

    使用上面的程序前,先說說如何生成私鑰和公鑰(對稱與非對稱加密,公鑰加密,私鑰解密等的原理,這裏就不說了),同時也把公鑰發送給認證方(遠程主機):

1)被認證方生成私鑰和公鑰

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day6$ ssh-keygen 
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day6$ ls /home/xpleaf/.ssh/
id_rsa  id_rsa.pub  known_hosts

2)將公鑰發送給認證方(遠程主機)

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day6$ ssh-copy-id oldboy@192.168.1.124

    完成了上面的步驟後,就能夠鏈接遠程主機並執行命令了:

root@xpleaf-machine:/mnt/hgfs/Python/day6# python ssh_key2.py 192.168.1.124 df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda3        9602276 3538304   5576192  39% /
tmpfs             959228       0    959228   0% /dev/shm
/dev/sda1         198337   34143    153954  19% /boot

root@xpleaf-machine:/mnt/hgfs/Python/day6# python ssh_key2.py 192.168.1.124 'df -h'
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       9.2G  3.4G  5.4G  39% /
tmpfs           937M     0  937M   0% /dev/shm
/dev/sda1       194M   34M  151M  19% /boot

    

2.Paramiko SFTP傳送文件

    代碼及註釋以下:

#!/usr/bin/env python

import paramiko
import sys,os

host = sys.argv[1]
user = 'oldboy'
password='123456'

t = paramiko.Transport((host,22))
t.connect(username=user,password=password)    #鏈接方式也能夠用key,這裏只須要將password=password改成pkey=key,其他的key代碼與前面的同樣

sftp = paramiko.SFTPClient.from_transport(t)  #使用t的設置方式鏈接遠程主機
sftp.get('/tmp/hello.txt','hello.txt')        #下載文件
sftp.put('ssh1.py','/tmp/ssh1.py')            #上傳文件

t.close()

    演示以下:

    這裏FTP客戶端有文件ssh1.py,FTP服務端(192.168.1.124的主機)的/tmp目錄下有hello.txt文件,須要將ssh1.py上傳到服務端,將hello.txt下載到客戶端的當前目錄。

1)運行程序

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day6$ python ssh_sftp3.py 192.168.1.124

若是沒有錯誤就不會有任何提示。


2)客戶端下查看下載的文件

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day6$ ls -l
總用量 7
-rwxrwxrwx 1 root root   19 10月  8 23:49 hello.txt
drwxrwxrwx 1 root root 4096 10月  8 22:40 sorftwares
-rwxrwxrwx 1 root root  435 10月  8 11:36 ssh1.py
-rwxrwxrwx 1 root root  544 10月  8 15:07 ssh_key2.py
-rwxrwxrwx 1 root root  331 10月  8 23:42 ssh_sftp3.py


3)服務端下查看上傳的文件

[oldboy@moban tmp]$ ls -l
total 12
drwxrwxrwt. 3 root   root   4096 May 13 09:35 etc
-rw-rw-r--  1 oldboy oldboy   19 Oct  8 12:11 hello.txt
-rw-rw-r--  1 oldboy oldboy  435 Oct  8 20:31 ssh1.py
相關文章
相關標籤/搜索