1. 程式人生 > >Python3的paramiko模組

Python3的paramiko模組

paramiko模組基於SSH用於連線遠端伺服器並執行相關操作

SSHClient

  • 用於連線遠端伺服器並執行基本命令

基於使用者名稱密碼連線

import paramiko

# 建立SSH物件
ssh = paramiko.SSHClient()
# 允許連線不在know_hosts檔案中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連線伺服器
ssh.connect(hostname='134.201.4.109', port=22, username='root', password='wljkzx-WG1')

# 執行命令
stdin, stdout, stderr = ssh.exec_command('df -h')
# 獲取命令結果
err_res, res = stdout.read(), stderr.read()
result = res if res else err_res
print(result.decode("utf-8"))

# 關閉連線
ssh.close()

基於公鑰金鑰連線

  • RSA非對稱金鑰驗證
ssh 金鑰
RSA -非對稱金鑰驗證
公鑰 public  key
私鑰  private key
10.0.0.31    -----> 10.0.0.41
私鑰                    公鑰
import paramiko
 
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
 
# 建立SSH物件
ssh = paramiko.SSHClient()
# 允許連線不在know_hosts檔案中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連線伺服器
ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', pkey=private_key)
 
# 執行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 獲取命令結果
result = stdout.read()
 
# 關閉連線
ssh.close()

SFTPClient

  • 用於連線遠端伺服器並執行上傳下載

基於使用者名稱密碼上傳下載

import paramiko
 
transport = paramiko.Transport(('hostname',22))
transport.connect(username='wupeiqi',password='123')
 
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()

基於公鑰金鑰上傳下載

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')
 
transp