python實戰之paramiko模組
阿新 • • 發佈:2019-01-05
基於密碼
ssh.py #相當於 ssh簡單連線操作原理
__author__ = "Burgess Zheng" import paramiko # 建立SSH物件 ssh = paramiko.SSHClient() # 允許連線不在know_hosts檔案中的主機#如:ssh rsa加密連線原理 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 連線伺服器 ssh.connect(hostname='10.0.0.150', port=52113, username='root', password='123456') # 執行命令 stdin, stdout, stderr = ssh.exec_command('df')#Linux命令返回3個值 # 執行ssh.exec_command('df') 該命令會返回3個值 #stdin:標準輸入 stdout:標準輸出 stderr:標準錯誤 res,err = stdout.read(),stderr.read() #stdoutread():讀標準輸出的結果 stderr.read()讀標準錯誤的結果 #把讀出的結果分別賦值給res和err result = res if res else err #三元運算 如果res有值result = res 如果res沒值就 result = err print(result.decode()) # 關閉連線 ssh.close()
ssh_sft.py #相當於 ssh的scp傳檔案原理
__author__ = "Burgess Zheng" import paramiko transport = paramiko.Transport(('10.0.0.31', 52113)) transport.connect(username='root', password='123456') #上面的只做連線 sftp = paramiko.SFTPClient.from_transport(transport) #sftp.put('筆記', '/tmp/test_from_win') #將location.py 上傳至伺服器 /tmp/test.py sftp.get('/root/oldgirl.txt', 'fromlinux.txt') # 將remove_path 下載到本地 local_path transport.close()
基於祕鑰
ssh rsaa python基於金鑰的連線(和ssh基於金鑰連線一樣的)
__author__ = "Burgess Zheng" #基於祕鑰連線 import paramiko private_key = paramiko.RSAKey.from_private_key_file('id_rsa31.txt') #指定你的私鑰的位置 # 建立SSH物件 ssh = paramiko.SSHClient() # 允許連線不在know_hosts檔案中的主機 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 連線伺服器 ssh.connect(hostname='10.0.0.41', port=52113, username='gongli', pkey=private_key) # 執行命令 stdin, stdout, stderr = ssh.exec_command('df') result = stdout.read() print(result.decode()) stdin, stdout2, stderr = ssh.exec_command('ifconfig')#兩條命令可以當做一條命令使用(''df;ifconfg) # 獲取命令結果 result2 = stdout2.read() print(result2.decode()) # 關閉連線 ssh.close()
ssh sftp python基於金鑰的上傳下載(和ssh scp基於公鑰上傳下載一樣的)
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='wupeiqi', pkey=private_key )
sftp = paramiko.SFTPClient.from_transport(transport)
# 將location.py 上傳至伺服器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 將remove_path 下載到本地 local_path
sftp.get('remove_path', 'local_path')
transport.close()