欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python異步SSH編程AsyncSSH的使用

 更新時間:2025年09月10日 11:27:19   作者:蕭鼎  
本文介紹了Python異步SSH庫AsyncSSH的核心功能與應(yīng)用場景,相比傳統(tǒng)同步SSH工具Paramiko,AsyncSSH基于asyncio框架,能夠高效處理大規(guī)模并發(fā)連接,感興趣的可以了解一下

一、前言

在網(wǎng)絡(luò)自動化與遠程運維中,SSH(Secure Shell) 協(xié)議幾乎是所有 IT 工程師和開發(fā)者的必備工具。從服務(wù)器管理、網(wǎng)絡(luò)設(shè)備配置,到批量自動化腳本,SSH 無處不在。

在 Python 生態(tài)中,傳統(tǒng)的 SSH 客戶端庫有 paramikofabric 等,它們主要基于同步模式。然而,隨著大規(guī)模自動化運維需求的增加,單線程阻塞模式逐漸暴露出效率瓶頸。在需要同時連接上百臺、甚至上千臺服務(wù)器時,異步化的 SSH 方案變得尤為重要。

這就是 AsyncSSH 的優(yōu)勢所在。它是一個基于 asyncio全功能 SSH 實現(xiàn),支持客戶端與服務(wù)器模式,功能豐富,性能優(yōu)異,非常適合構(gòu)建高并發(fā)的自動化運維系統(tǒng)。

本文將從基礎(chǔ)到實戰(zhàn),全面解析 AsyncSSH 的功能與應(yīng)用,幫助你在 Python 項目中靈活使用異步 SSH。

二、SSH 協(xié)議回顧

在深入 AsyncSSH 之前,先快速回顧 SSH 的基礎(chǔ)概念。

  1. SSH 功能

    • 遠程登錄:加密的遠程終端訪問。
    • 文件傳輸:SCP/SFTP 協(xié)議。
    • 端口轉(zhuǎn)發(fā):本地/遠程/動態(tài)隧道。
    • 密鑰認(rèn)證:支持公鑰/私鑰方式,提升安全性。
  2. SSH 常見應(yīng)用場景

    • 系統(tǒng)管理員遠程管理服務(wù)器。
    • DevOps 自動化部署與批量命令執(zhí)行。
    • 安全隧道與代理服務(wù)。
    • 文件傳輸與同步。
  3. 為什么需要異步 SSH?

    • 同步 SSH(如 Paramiko)在執(zhí)行大規(guī)模批量命令時會阻塞,性能受限。
    • 異步 SSH(AsyncSSH)基于 asyncio,可以同時處理成百上千的連接請求,大大提高效率。

三、AsyncSSH 簡介

AsyncSSH 是一個 Python 異步 SSH 庫,主要特性包括:

  • 完全基于 asyncio,天然支持異步并發(fā)。
  • 支持 SSH 客戶端和服務(wù)器 模式。
  • 支持 SFTP、SCP 文件傳輸。
  • 支持 端口轉(zhuǎn)發(fā)(隧道代理)
  • 支持 公鑰/密碼認(rèn)證,并支持 OpenSSH 格式密鑰。
  • 性能優(yōu)秀,可同時管理數(shù)千個 SSH 連接。

相比 Paramiko:

  • Paramiko:同步模式,適合小規(guī)模腳本。
  • AsyncSSH:異步模式,適合高并發(fā)場景。

四、安裝與環(huán)境配置

AsyncSSH 可以通過 pip 安裝:

pip install asyncssh

系統(tǒng)要求:

  • Python 3.7+
  • 支持 Linux、macOS、Windows(部分功能在 Windows 下受限)。

如果需要性能提升,可以配合 uvloop 作為 asyncio 事件循環(huán):

pip install uvloop

五、核心 API 與使用模式

AsyncSSH 的核心 API 與 asyncio 高度集成,主要包括:

  1. 連接管理

    • asyncssh.connect(host, port, username, password/key)
  2. 命令執(zhí)行

    • conn.run(cmd)
    • conn.create_process()
  3. 文件傳輸

    • asyncssh.scp()
    • asyncssh.sftp()
  4. 端口轉(zhuǎn)發(fā)

    • create_connection() / start_server()
  5. 服務(wù)器模式

    • asyncssh.listen()

AsyncSSH 的編程模式非常貼近 asyncio,使用 async/await 即可完成 SSH 相關(guān)操作。

六、基礎(chǔ)用法示例

1. 執(zhí)行遠程命令

import asyncio, asyncssh

async def run_cmd():
    async with asyncssh.connect('192.168.1.10', username='user', password='password') as conn:
        result = await conn.run('uname -a', check=True)
        print(result.stdout)

asyncio.run(run_cmd())

2. 批量并發(fā)執(zhí)行命令

import asyncio, asyncssh

async def run_cmd(host):
    async with asyncssh.connect(host, username='user', password='password') as conn:
        result = await conn.run('uptime')
        print(f"{host}: {result.stdout.strip()}")

async def main():
    hosts = ['192.168.1.10', '192.168.1.11', '192.168.1.12']
    await asyncio.gather(*(run_cmd(h) for h in hosts))

asyncio.run(main())

相比 Paramiko 的串行執(zhí)行,這種方式可以顯著提升執(zhí)行效率。

3. 文件傳輸(SCP/SFTP)

import asyncio, asyncssh

async def upload():
    async with asyncssh.connect('192.168.1.10', username='user', password='password') as conn:
        await asyncssh.scp('local.txt', (conn, '/home/user/remote.txt'))

asyncio.run(upload())

4. 創(chuàng)建 SSH 服務(wù)器

import asyncio, asyncssh

async def handle_client(process):
    process.stdout.write('Welcome to AsyncSSH server!\n')
    async for line in process.stdin:
        process.stdout.write(f'You said: {line}')

async def start_server():
    await asyncssh.listen('', 8022, server_host_keys=['ssh_host_key'], process_factory=handle_client)

asyncio.run(start_server())

七、實戰(zhàn)案例

案例一:批量主機健康檢查

需求:連接 100 臺服務(wù)器,獲取系統(tǒng)負(fù)載與內(nèi)存使用情況,并存入數(shù)據(jù)庫。

import asyncio, asyncssh

async def check_host(host):
    try:
        async with asyncssh.connect(host, username='user', password='pass') as conn:
            result = await conn.run("uptime && free -m")
            return host, result.stdout
    except Exception as e:
        return host, f"Error: {e}"

async def main():
    hosts = [f"192.168.1.{i}" for i in range(10, 110)]
    results = await asyncio.gather(*(check_host(h) for h in hosts))
    for host, output in results:
        print(f"{host}:\n{output}")

asyncio.run(main())

相比同步方式,AsyncSSH 可以在幾秒內(nèi)完成所有任務(wù)。

案例二:自動化部署腳本

async def deploy(host):
    async with asyncssh.connect(host, username='deploy', client_keys=['~/.ssh/id_rsa']) as conn:
        await conn.run("mkdir -p /opt/app")
        await asyncssh.scp('app.tar.gz', (conn, '/opt/app/'))
        await conn.run("cd /opt/app && tar -xzf app.tar.gz && ./start.sh")

asyncio.run(deploy("192.168.1.20"))

可輕松實現(xiàn)批量自動化部署。

案例三:SSH 隧道轉(zhuǎn)發(fā)

async def forward():
    async with asyncssh.connect('remote.server.com', username='user') as conn:
        listener = await conn.forward_local_port('127.0.0.1', 8080, 'localhost', 80)
        await listener.wait_closed()

asyncio.run(forward())

這樣本地 http://127.0.0.1:8080 就會轉(zhuǎn)發(fā)到遠程 localhost:80

八、AsyncSSH 與 Paramiko 對比

特性ParamikoAsyncSSH
模式同步異步(asyncio)
并發(fā)能力適合少量連接可管理數(shù)千連接
功能SSH/SFTPSSH/SFTP/Server/隧道
性能中等高并發(fā)優(yōu)勢明顯
學(xué)習(xí)成本較低需要掌握 asyncio

九、性能優(yōu)化與最佳實踐

  1. 使用 asyncio.gather() 并發(fā)執(zhí)行
  2. 配合 uvloop 提升事件循環(huán)性能。
  3. 復(fù)用連接,避免頻繁建立/關(guān)閉 SSH 會話。
  4. 異常捕獲與超時設(shè)置,保證穩(wěn)定性。
  5. 批量任務(wù)分組,避免同時連接數(shù)過大導(dǎo)致服務(wù)器資源耗盡。

十、應(yīng)用場景

  • 大規(guī)模運維監(jiān)控:批量收集服務(wù)器狀態(tài)。
  • 自動化部署系統(tǒng):分發(fā)應(yīng)用、更新配置。
  • CI/CD 流程:結(jié)合 Jenkins/GitLab 實現(xiàn)遠程部署。
  • 網(wǎng)絡(luò)設(shè)備管理:批量執(zhí)行命令(如交換機配置)。
  • SSH 代理/隧道服務(wù):構(gòu)建中間跳板機。

十一、AsyncSSH 的優(yōu)勢與不足

優(yōu)勢

  • 原生 asyncio 支持,高并發(fā)性能優(yōu)秀。
  • 功能覆蓋 SSH/SFTP/隧道/服務(wù)器,幾乎全能。
  • 接口簡潔,代碼結(jié)構(gòu)清晰。

不足

  • 學(xué)習(xí)成本稍高,需要掌握異步編程。
  • Windows 下部分功能不完整(如 OpenSSH key 格式兼容性)。
  • 社區(qū)生態(tài)不如 Paramiko 廣泛。

十二、未來發(fā)展與展望

隨著 云計算、DevOps、自動化運維 的普及,異步編程逐漸成為主流。AsyncSSH 將在以下方向發(fā)揮更大作用:

  • Ansible、SaltStack 等工具集成,提高并發(fā)能力。
  • 更深入地支持 零信任安全架構(gòu)。
  • 優(yōu)化與 asyncio/Trio/Curio 等異步框架的兼容性。
  • 增強 分布式自動化系統(tǒng) 的 SSH 基礎(chǔ)組件地位。

十三、總結(jié)

通過本文,你應(yīng)該掌握了:

  • SSH 協(xié)議的基本概念與應(yīng)用場景。
  • AsyncSSH 的安裝方法與核心功能。
  • 異步 SSH 的常見用法(命令執(zhí)行、SFTP、隧道、服務(wù)器)。
  • 實戰(zhàn)案例(批量檢查、自動化部署、隧道轉(zhuǎn)發(fā))。
  • AsyncSSH 與 Paramiko 的對比與性能優(yōu)化。
  • AsyncSSH 在運維、自動化和云原生領(lǐng)域的應(yīng)用前景。

在現(xiàn)代高并發(fā)運維環(huán)境中,AsyncSSH 無疑是 Python 異步 SSH 編程的利器。如果你正在構(gòu)建一個需要管理成百上千臺服務(wù)器的系統(tǒng),那么 AsyncSSH 會讓你的自動化腳本更高效、更優(yōu)雅。

到此這篇關(guān)于Python異步SSH編程AsyncSSH的使用的文章就介紹到這了,更多相關(guān)Python異步編程AsyncSSH內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python openCV實現(xiàn)攝像頭獲取人臉圖片

    python openCV實現(xiàn)攝像頭獲取人臉圖片

    這篇文章主要為大家詳細(xì)介紹了python openCV實現(xiàn)攝像頭獲取人臉圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Django中使用pillow實現(xiàn)登錄驗證碼功能(帶刷新驗證碼功能)

    Django中使用pillow實現(xiàn)登錄驗證碼功能(帶刷新驗證碼功能)

    這篇文章主要介紹了Django中使用pillow實現(xiàn)登錄驗證碼功能(帶刷新驗證碼功能),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 一文秒懂python中的 \r 與 end=‘’ 巧妙用法

    一文秒懂python中的 \r 與 end=‘’ 巧妙用法

    這篇文章主要介紹了python中的 \r 與 end=‘’ 巧妙用法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Python subprocess模塊常見用法分析

    Python subprocess模塊常見用法分析

    這篇文章主要介紹了Python subprocess模塊常見用法,結(jié)合實例形式分析了subprocess模塊進程操作相關(guān)使用技巧與注意事項,需要的朋友可以參考下
    2018-06-06
  • Python3實現(xiàn)的判斷環(huán)形鏈表算法示例

    Python3實現(xiàn)的判斷環(huán)形鏈表算法示例

    這篇文章主要介紹了Python3實現(xiàn)的判斷環(huán)形鏈表算法,涉及Python針對環(huán)形鏈表的遍歷、判斷相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • 如何利用itertuples對DataFrame進行遍歷

    如何利用itertuples對DataFrame進行遍歷

    這篇文章主要介紹了如何利用itertuples對DataFrame進行遍歷問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python 爬取天氣網(wǎng)衛(wèi)星圖片

    python 爬取天氣網(wǎng)衛(wèi)星圖片

    根據(jù)網(wǎng)站URL的規(guī)律編寫的一個爬取天氣網(wǎng)衛(wèi)星圖片的python爬蟲,使用了requests包,感興趣的朋友可以參考下
    2021-06-06
  • python+selenium?實現(xiàn)掃碼免密登錄示例代碼

    python+selenium?實現(xiàn)掃碼免密登錄示例代碼

    這篇文章主要介紹了python+selenium?實現(xiàn)掃碼免密登錄,首先掃碼登錄獲取cookies保存到本地未后面免密登錄做準(zhǔn)備,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 對python讀寫文件去重、RE、set的使用詳解

    對python讀寫文件去重、RE、set的使用詳解

    今天小編就為大家分享一篇對python讀寫文件去重、RE、set的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解

    Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解

    本文主要介紹了Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論