1. 程式人生 > >堡壘機 Paramiko 模塊

堡壘機 Paramiko 模塊

服務器 test put nbsp images policy 圖片 pre 覆蓋

Paramiko 模塊

引用源:http://www.cnblogs.com/wupeiqi/articles/5095821.html

前言:Paramiko模塊封裝了SSH協議,在連接服務器這方面廣泛使用,是python連接Linux的重要模塊。此模塊封裝了很多方法和類,可以根據需要合理使用。

一、連接服務器

  1.用戶名密碼連接(不安全)。這裏介紹兩種方法:

    第一:

技術分享圖片
 1 import paramiko
 2   
 3 # 創建SSH對象
 4 ssh = paramiko.SSHClient()
 5 # 允許連接不在know_hosts文件中的主機
 6 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
7 # 連接服務器 8 ssh.connect(hostname=c1.salt.com, port=22, username=wupeiqi, password=123) 9 10 # 執行命令 11 stdin, stdout, stderr = ssh.exec_command(df) 12 # 獲取命令結果 13 result = stdout.read() 14 15 # 關閉連接 16 ssh.close()
View Code

    第二:

技術分享圖片
 1 import paramiko
 2 
 3 transport = paramiko.Transport((
hostname, 22)) 4 transport.connect(username=wupeiqi, password=123) 5 6 ssh = paramiko.SSHClient() 7 ssh._transport = transport 8 9 stdin, stdout, stderr = ssh.exec_command(df) 10 print stdout.read() 11 12 transport.close()
View Code

    這裏推薦使用第二種封裝的方法,用transport封裝了連接要用到的用戶名,密碼,主機,端口等,重要的是可以忽略第一次連接時主機認證提示。

  2.公鑰連接

    也是從上面兩種方法中,添加公鑰認證。公鑰一定要放到指定的文件夾,否則會異常。

    第一:

技術分享圖片
 1 import paramiko
 2  
 3 private_key = paramiko.RSAKey.from_private_key_file(/home/auto/.ssh/id_rsa)
 4  
 5 # 創建SSH對象
 6 ssh = paramiko.SSHClient()
 7 # 允許連接不在know_hosts文件中的主機
 8 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 9 # 連接服務器
10 ssh.connect(hostname=c1.salt.com, port=22, username=wupeiqi, key=private_key)
11  
12 # 執行命令
13 stdin, stdout, stderr = ssh.exec_command(df)
14 # 獲取命令結果
15 result = stdout.read()
16  
17 # 關閉連接
18 ssh.close()
View Code

    第二:

技術分享圖片
 1 import paramiko
 2 
 3 private_key = paramiko.RSAKey.from_private_key_file(/home/auto/.ssh/id_rsa)
 4 
 5 transport = paramiko.Transport((hostname, 22))
 6 transport.connect(username=wupeiqi, pkey=private_key)
 7 
 8 ssh = paramiko.SSHClient()
 9 ssh._transport = transport
10 
11 stdin, stdout, stderr = ssh.exec_command(df)
12 
13 transport.close()
View Code

 二、文件傳輸

  這裏要註意的是文件路徑的參數,文件需要全路徑。上傳到服務器是直接覆蓋,不能給文件夾路徑,否則會報OSerror異常。方式都是封裝好的,看個人喜好去選擇。

  1.基於用戶名密碼(不安全)。

技術分享圖片
 1 import paramiko
 2  
 3 transport = paramiko.Transport((hostname,22))
 4 transport.connect(username=wupeiqi,password=123)
 5  
 6 sftp = paramiko.SFTPClient.from_transport(transport)
 7 # 將location.py 上傳至服務器 /tmp/test.py
 8 sftp.put(/tmp/location.py, /tmp/test.py)
 9 # 將remove_path 下載到本地 local_path
10 sftp.get(remove_path, local_path)
11  
12 transport.close()
View Code

  2.基於公鑰

技術分享圖片
 1 import paramiko
 2  
 3 private_key = paramiko.RSAKey.from_private_key_file(/home/auto/.ssh/id_rsa)
 4  
 5 transport = paramiko.Transport((hostname, 22))
 6 transport.connect(username=wupeiqi, pkey=private_key )
 7  
 8 sftp = paramiko.SFTPClient.from_transport(transport)
 9 # 將location.py 上傳至服務器 /tmp/test.py
10 sftp.put(/tmp/location.py, /tmp/test.py)
11 # 將remove_path 下載到本地 local_path
12 sftp.get(remove_path, local_path)
13  
14 transport.close()
View Code

三、堡壘機

  如下圖所示:

    技術分享圖片

堡壘機 Paramiko 模塊