python paramiko 模塊使用方法

pythonparamiko paramiko 遵循SSH2協議,支持以加密和認證的方式,進行遠程服務器的連接,可以實現遠程文件的上傳,下載或通過ssh遠程執行命令。
項目地址:https://github.com/paramiko/paramiko
官方文檔:http://docs.paramiko.org/

一、安裝

root@ubuntu:~/paramiko# pip install paramiko

測試是否安裝成功

>>> import paramiko
>>>

二、上傳文件到遠程服務器
原理:通過SFTPClient類根據SSH傳輸協議的sftp會話,實現遠程文件上傳、下載等操作。實現遠程文件上傳、下載。
任務:10. 1.101.187向10.1.101.186發送文件。
10.1.101.187 目錄/root/paramiko  有三個文件 paramikosend.py  test  test.tar
10.1.101.186 目錄/root/paramiko   開始爲空文件夾
執行python paramikosend.py,代碼如下

root@ubuntu:~/paramiko# cat paramikosend.py 
import paramiko,datetime,os
hostname = '10.1.101.186'
username = 'root'
password = '123456'
port = 22
local_dir = '/root/paramiko'
remote_dir = '/root/paramiko'
try:
    t=paramiko.Transport((hostname,port))
    t.connect(username=username,password=password)
    sftp = paramiko.SFTPClient.from_transport(t)
    files = os.listdir(local_dir)        
    for f in files:
        sftp.put(os.path.join(local_dir,f),os.path.join(remote_dir,f))
    t.close()
except Exception:       
    print "connect error!"

結果:
231503117247887.png
三、從遠程服務器下載文件
原理:通過SFTPClient類根據SSH傳輸協議的sftp會話,實現遠程文件上傳、下載等操作。實現遠程文件上傳、下載。
任務:現在10.1.101.186的/root/paramiko/temp186目錄有兩個文件,將其下載到10.1.101.187的/root/paramiko/temp187目錄。
231524087244467.png
231525485531535.png
執行 python paramikoget.py ,代碼如下

root@ubuntu:~/paramiko# cat paramikoget.py 
import paramiko,datetime,os
hostname = '10.1.101.186'
username = 'root'
password = '123456'
port = 22
local_dir = '/root/paramiko/temp187'
remote_dir = '/root/paramiko/temp186'
try:
    t=paramiko.Transport((hostname,port))
    t.connect(username=username,password=password)
    sftp = paramiko.SFTPClient.from_transport(t)
    files = sftp.listdir(remote_dir) #這裏需要注意,列出遠程文件必須使用sftp     
    for f in files:
        sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,f))
    t.close()
except Exception:        
    print "connect error!"

結果:
231549266621894.png
四、執行命令測試
原理:通過SSHClient類執行命令。SSHClient類是SSH服務會話的高級表示,封裝了傳輸、通道以及SFTPClient的校驗、建立方法,通常用於執行命令。
任務:通過10.1.101.187連接到10.1.101.186,然後進入目錄/root/paramiko,創建一個目錄lxy。
執行python paramikocommand.py,代碼如下:

root@ubuntu:~/paramiko# cat paramikocommand.py 
#!/usr/bin/python
import paramiko
hostname = '10.1.101.186'
username = 'root'
password = '123456'
port = 22

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname,port=port,username=username,password=password)
stdin, stdout, stderr = ssh.exec_command("cd  /root/paramiko;mkdir lxy")print stdout.readlines()
ssh.close()

結果:
231618248965886.png
命令中也可以帶參數:

root@ubuntu:~/paramiko# cat paramikocommand.py 
#!/usr/bin/python
import paramiko
hostname = '10.1.101.186'
username = 'root'
password = '123456'
port = 22
name='testcmd'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname,port=port,username=username,password=password)
stdin, stdout, stderr = ssh.exec_command("cd /root/paramiko;mkdir %s" %name)
print stdout.readlines()
ssh.close()

231626471784371.png
Note:exec_command爲單個會話,執行完成之後會回到登錄時的缺省目錄。
比如執行下面兩句。

stdin, stdout, stderr = ssh.exec_command("cd  /root/paramiko;mkdir %s" %name)
stdin,stdout,stderr = ssh.exec_command('mkdir haha')

haha目錄最終是在缺省的/root目錄下新建的,而不是/root/paramiko目錄。
五、python遠程執行操作的其他開源模塊
fabric:fabric是封裝了paramiko模塊來實現ssh來傳輸文件的。
pexpect:也可以實現ssh 登錄到某個用戶指定的主機上,運行某個用戶指定的命令


原文地址:http://www.cnblogs.com/starof/p/4670433.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章