1. 程式人生 > 實用技巧 >Python之SSH-paramiko模組的使用

Python之SSH-paramiko模組的使用

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 [email protected] 

# 4 以後再連線伺服器時,不需要在輸入密碼
ssh [email protected]