堡壘機 Paramiko 模塊
阿新 • • 發佈:2017-12-20
服務器 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())View Code7 # 連接服務器 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()
第二:
1 import paramiko 2 3 transport = paramiko.Transport((‘View Codehostname‘, 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()
這裏推薦使用第二種封裝的方法,用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 模塊