paramiko
一 介紹
# 用於幫助開發者通過代碼遠程連接服務器,並對服務器進行操作。
# pip3 install paramiko
二 通過用戶名密碼方式遠程執行命令
import paramiko
# 創建SSH對象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務器
ssh.connect(hostname='192.168.16.85', port=22, username='root', password='123456')
# 執行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 獲取命令結果
result = stdout.read()
# 關閉連接
ssh.close()
print(result.decode('utf-8'))
三 通過用戶名密碼方式上傳下載文件
import paramiko
transport = paramiko.Transport(('192.168.16.85', 22))
transport.connect(username='root', password='123456')
sftp = paramiko.SFTPClient.from_transport(transport)
# 將location.py 上傳至服務器 /tmp/test.py
# sftp.put('123.txt', '/data/123.txt')
sftp.get('/data/123.txt', '123.txt')
transport.close()
四 通過公鑰私鑰遠程執行命令
import paramiko
private_key = paramiko.RSAKey.from_private_key_file(r'C:/Users/Administrator/.ssh/id_rsa')
# 創建SSH對象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務器
ssh.connect(hostname='192.168.16.85', port=22, username='root', pkey=private_key)
# 執行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 獲取命令結果
result = stdout.read()
# 關閉連接
ssh.close()
print(result)
五 通過公鑰私鑰遠程上傳下載文件
import paramiko
private_key = paramiko.RSAKey.from_private_key_file(r'C:/Users/Administrator/.ssh/id_rsa')
transport = paramiko.Transport(('192.168.16.85', 22))
transport.connect(username='root', pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
# 將location.py 上傳至服務器 /tmp/test.py
# sftp.put('/tmp/123.py', '/tmp/123.py')
# 將remove_path 下載到本地 local_path
# sftp.get('123.py', '123.py')
transport.close()
六 通過私鑰字符串遠程連接服務器
# 也可以是存在於數據庫中
key = """-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----"""
import paramiko
from io import StringIO
private_key = paramiko.RSAKey(file_obj=StringIO(key))
# 創建SSH對象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務器
ssh.connect(hostname='192.168.16.85', port=22, username='root', pkey=private_key)
# 執行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 獲取命令結果
result = stdout.read()
# 關閉連接
ssh.close()
print(result)
七 生成公鑰私鑰並上傳
# 1 生成公鑰和私鑰s
sh-keygen.exe -m pem
# 2 在當前用戶家目錄會生成: .ssh/id_rsa.pub .ssh/id_rsa
# 3 把公鑰放到服務器
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.16.85
# 4 以后再連接服務器時,不需要在輸入密碼
ssh root@192.168.16.85