Python利用paramiko實現(xiàn)基本的SSH客戶端操作
簡介
??paramiko?? 是一個用于進行 SSH2 協(xié)議編程的 Python 庫,它支持加密和認證功能,可以用來實現(xiàn)安全的遠程命令執(zhí)行和文件傳輸。本文將通過幾個實例來介紹如何使用 ??paramiko?? 進行基本的 SSH 客戶端操作。
安裝 Paramiko
在使用 ??paramiko?? 之前,需要先安裝該庫。可以通過 ??pip?? 命令輕松安裝:
pip install paramiko
基本使用
創(chuàng)建 SSH 客戶端連接
首先,我們需要創(chuàng)建一個 SSH 客戶端對象,并通過該對象連接到遠程服務器。
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username='username', password='password')
??set_missing_host_key_policy(paramiko.AutoAddPolicy())??:設置自動添加策略,用于添加和保存服務器的 SSH 密鑰。
??connect()?? 方法用于連接到指定的主機,需要提供主機名、用戶名和密碼。
執(zhí)行遠程命令
連接成功后,可以使用 ??exec_command()?? 方法來執(zhí)行遠程命令。
stdin, stdout, stderr = ssh.exec_command('ls /home')
print(stdout.read().decode())
??exec_command()?? 返回三個對象:??stdin??(標準輸入)、??stdout??(標準輸出)和 ??stderr??(標準錯誤)。
使用 ??stdout.read().decode()?? 可以讀取命令的輸出并解碼為字符串格式。
文件傳輸
除了執(zhí)行命令,??paramiko?? 還支持文件的上傳和下載。這可以通過 ??SFTP?? 功能實現(xiàn)。
上傳文件
sftp = ssh.open_sftp()
sftp.put('/path/to/local/file', '/path/to/remote/file')
sftp.close()
??open_sftp()?? 方法打開 SFTP 會話。
??put()?? 方法用于上傳本地文件到遠程服務器。
最后調(diào)用 ??close()?? 方法關(guān)閉 SFTP 會話。
下載文件
sftp = ssh.open_sftp()
sftp.get('/path/to/remote/file', '/path/to/local/file')
sftp.close()
??get()?? 方法用于從遠程服務器下載文件到本地。
關(guān)閉連接
完成所有操作后,記得關(guān)閉 SSH 連接以釋放資源。
ssh.close()
高級用法
使用密鑰認證
除了使用密碼認證,??paramiko?? 還支持使用私鑰進行身份驗證。
private_key = paramiko.RSAKey.from_private_key_file('/path/to/private/key')
ssh.connect('hostname', username='username', pkey=private_key)
??RSAKey.from_private_key_file()?? 方法從指定路徑加載私鑰文件。
在 ??connect()?? 方法中使用 ??pkey?? 參數(shù)傳遞私鑰對象。
處理命令輸出
在執(zhí)行遠程命令時,有時需要處理命令的標準輸出和標準錯誤??梢酝ㄟ^檢查 ??stdout?? 和 ??stderr?? 來實現(xiàn)這一點。
stdin, stdout, stderr = ssh.exec_command('command')
output = stdout.read().decode()
error = stderr.read().decode()
if error:
print(f"Error: {error}")
else:
print(f"Output: {output}")
檢查 ??stderr?? 的內(nèi)容,如果存在則打印錯誤信息。
如果沒有錯誤,則打印命令的輸出。
知識補充
??paramiko??? 提供了強大的功能來處理 SSH 連接,無論是執(zhí)行遠程命令還是文件傳輸,都非常方便。通過本文的幾個實例,希望讀者能夠?qū)???paramiko??? 的基本用法有一個初步的了解,并能夠在實際項目中應用這些知識。以上是關(guān)于 ??paramiko??? 庫的基本使用教程,包括如何安裝、創(chuàng)建 SSH 連接、執(zhí)行命令、文件傳輸以及一些高級用法。??paramiko??? 是一個用于在 Python 中進行 SSH2 協(xié)議編程的強大庫,常用于遠程服務器管理和自動化任務。下面我將提供幾個實際應用場景中的 ??paramiko??
示例代碼:
1. 遠程執(zhí)行命令
假設你需要定期從遠程服務器獲取系統(tǒng)信息,比如 CPU 使用率、內(nèi)存使用情況等。
import paramiko
# 創(chuàng)建 SSH 客戶端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接到遠程服務器
ssh.connect('192.168.1.100', username='user', password='password')
# 執(zhí)行命令
stdin, stdout, stderr = ssh.exec_command('top -b -n 1')
output = stdout.read().decode('utf-8')
error = stderr.read().decode('utf-8')
# 打印輸出
print("Output:\n", output)
if error:
print("Error:\n", error)
# 關(guān)閉連接
ssh.close()2. 上傳和下載文件
假設你需要將本地文件上傳到遠程服務器,或者從遠程服務器下載文件。
import paramiko
# 創(chuàng)建 SSH 客戶端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接到遠程服務器
ssh.connect('192.168.1.100', username='user', password='password')
# 創(chuàng)建 SFTP 會話
sftp = ssh.open_sftp()
# 上傳文件
local_path = '/path/to/local/file.txt'
remote_path = '/path/to/remote/file.txt'
sftp.put(local_path, remote_path)
# 下載文件
remote_path = '/path/to/remote/file.txt'
local_path = '/path/to/local/file.txt'
sftp.get(remote_path, local_path)
# 關(guān)閉 SFTP 會話和 SSH 連接
sftp.close()
ssh.close()3. 動態(tài)配置管理
假設你需要在多臺服務器上動態(tài)配置環(huán)境變量或修改配置文件。
import paramiko
# 創(chuàng)建 SSH 客戶端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接到遠程服務器
ssh.connect('192.168.1.100', username='user', password='password')
# 修改配置文件
command = "echo 'export PATH=$PATH:/new/path' >> ~/.bashrc"
stdin, stdout, stderr = ssh.exec_command(command)
output = stdout.read().decode('utf-8')
error = stderr.read().decode('utf-8')
# 打印輸出
print("Output:\n", output)
if error:
print("Error:\n", error)
# 重新加載配置文件
command = "source ~/.bashrc"
stdin, stdout, stderr = ssh.exec_command(command)
output = stdout.read().decode('utf-8')
error = stderr.read().decode('utf-8')
# 打印輸出
print("Output:\n", output)
if error:
print("Error:\n", error)
# 關(guān)閉連接
ssh.close()4. 遠程日志監(jiān)控
假設你需要實時監(jiān)控遠程服務器上的日志文件,并在出現(xiàn)特定錯誤時發(fā)送通知。
import paramiko
import time
# 創(chuàng)建 SSH 客戶端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接到遠程服務器
ssh.connect('192.168.1.100', username='user', password='password')
# 打開日志文件
command = "tail -f /var/log/syslog"
stdin, stdout, stderr = ssh.exec_command(command)
# 實時讀取日志
try:
while True:
line = stdout.readline()
if line:
print(line.strip())
# 檢查特定錯誤
if "ERROR" in line:
print("Error detected: ", line.strip())
# 發(fā)送通知(例如通過郵件或消息服務)
except KeyboardInterrupt:
print("Monitoring stopped.")
# 關(guān)閉連接
ssh.close()這些示例展示了 ??paramiko?? 在不同場景下的應用,希望對你有所幫助!
paramiko?? 是一個用于在 Python 中實現(xiàn) SSH2 協(xié)議的庫,它允許你遠程連接到其他機器并執(zhí)行命令、傳輸文件等。下面我將詳細介紹如何使用 ??paramiko?? 創(chuàng)建一個 SSH 客戶端,并通過示例代碼來展示其基本用法。
1. 安裝 Paramiko
首先,你需要安裝 ??paramiko?? 庫??梢酝ㄟ^ ??pip?? 來安裝:
pip install paramiko
2. 基本用法
導入庫
import paramiko
創(chuàng)建 SSH 客戶端
ssh = paramiko.SSHClient()
自動添加未知主機密鑰
為了簡化操作,你可以設置 ??SSHClient?? 自動添加未知主機的密鑰到本地 ??known_hosts?? 文件中:
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
連接到遠程服務器
使用 ??connect?? 方法連接到遠程服務器。你需要提供主機名(或 IP 地址)、用戶名和密碼(或私鑰):
ssh.connect('hostname_or_ip', username='username', password='password')
或者使用私鑰文件:
private_key = paramiko.RSAKey.from_private_key_file('/path/to/private/key')
ssh.connect('hostname_or_ip', username='username', pkey=private_key)
執(zhí)行命令
連接成功后,可以使用 ??exec_command?? 方法執(zhí)行命令:
stdin, stdout, stderr = ssh.exec_command('ls /home')
print(stdout.read().decode())
上傳和下載文件
使用 ??SFTP?? 會話來上傳和下載文件:
sftp = ssh.open_sftp()
sftp.put('/local/path/to/file', '/remote/path/to/file') # 上傳文件
sftp.get('/remote/path/to/file', '/local/path/to/file') # 下載文件
sftp.close()
關(guān)閉連接
完成所有操作后,記得關(guān)閉 SSH 連接:
ssh.close()
完整示例
下面是一個完整的示例,展示了如何連接到遠程服務器、執(zhí)行命令并上傳/下載文件:
import paramiko
# 創(chuàng)建 SSH 客戶端
ssh = paramiko.SSHClient()
# 自動添加未知主機密鑰
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接到遠程服務器
ssh.connect('hostname_or_ip', username='username', password='password')
# 執(zhí)行命令
stdin, stdout, stderr = ssh.exec_command('ls /home')
print("Output of 'ls /home':")
print(stdout.read().decode())
# 上傳文件
sftp = ssh.open_sftp()
sftp.put('/local/path/to/file', '/remote/path/to/file')
print("File uploaded successfully.")
# 下載文件
sftp.get('/remote/path/to/file', '/local/path/to/file')
print("File downloaded successfully.")
# 關(guān)閉 SFTP 會話
sftp.close()
# 關(guān)閉 SSH 連接
ssh.close()注意事項
安全性:使用密碼連接時,確保密碼的安全性。如果可能,使用密鑰對進行身份驗證。
錯誤處理:在實際應用中,建議添加異常處理機制,以應對網(wǎng)絡問題或其他異常情況。
資源管理:確保在操作完成后關(guān)閉 SFTP 會話和 SSH 連接,以釋放資源。
到此這篇關(guān)于Python利用paramiko實現(xiàn)基本的SSH客戶端操作的文章就介紹到這了,更多相關(guān)Python paramiko使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python獲取excel內(nèi)容及相關(guān)操作代碼實例
這篇文章主要介紹了Python獲取excel內(nèi)容及相關(guān)操作代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
Python爬蟲實現(xiàn)使用beautifulSoup4爬取名言網(wǎng)功能案例
這篇文章主要介紹了Python爬蟲實現(xiàn)使用beautifulSoup4爬取名言網(wǎng)功能,結(jié)合實例形式分析了Python基于beautifulSoup4模塊爬取名言網(wǎng)并存入MySQL數(shù)據(jù)庫相關(guān)操作技巧,需要的朋友可以參考下2019-09-09
詳解Python下Flask-ApScheduler快速指南
Flask是Python社區(qū)非常流行的一個Web開發(fā)框架,本文將嘗試將介紹APScheduler應用于Flask之中,非常具有實用價值,需要的朋友可以參考下2018-11-11
Python如何用NumPy讀取和保存點云數(shù)據(jù)
這篇文章主要介紹了Python如何用NumPy讀取和保存點云數(shù)據(jù),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08
pandas數(shù)據(jù)處理基礎(chǔ)之篩選指定行或者指定列的數(shù)據(jù)
這篇文章主要介紹了pandas數(shù)據(jù)處理基礎(chǔ)之篩選指定行或者指定列的數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2018-05-05
Python使用Pickle模塊進行數(shù)據(jù)保存和讀取的講解
今天小編就為大家分享一篇關(guān)于Python使用Pickle模塊進行數(shù)據(jù)保存和讀取的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04

