Python Paramiko模塊中exec_command()和invoke_shell()兩種操作區(qū)別
前言
Paramiko 是 Python 語言的一個 SSH 客戶端??梢赃h程連接Linux服務器,通過 python 對 Linux 進行操作,可以實現(xiàn)進行對遠程服務器進行下載和上傳文件操作。
- exec_command()函數(shù)是將服務器執(zhí)行完的結(jié)果一次性返回給你;
- invoke_shell()函數(shù)類似shell終端,可以將執(zhí)行結(jié)果分批次返回,看到任務的執(zhí)行情況,不會因為執(zhí)行一個很長的腳本而不知道是否執(zhí)行成功
exec_command 和 invoke_shell 區(qū)別
invoke_shell 使用 SSH shell channel,而 exec_command 使用 SSH exec channel
shell channel在正常情況下,SSH終端客戶端(例如PuTTY)會使用shell channel
Shell channel執(zhí)行登錄Shell(就像您使用SSH終端客戶端登錄一樣)。然后,shell程序?qū)@示命令提示符,并等待客戶端/用戶鍵入命令。
Shell channel的目的是實現(xiàn)交互式Shell會話。那是很少做的事情。如果這樣做,通常會希望使用終端仿真(Paramiko invoke_shell會執(zhí)行此操作,但實際上可以在不進行終端仿真的情況下打開shell channel)。
exec channel
exec channel的目的是使命令執(zhí)行自動化。因此,通常您不想使用終端仿真,以避免使用該命令執(zhí)行諸如分頁,著色和主要是交互式確認之類的操作。
exec命令將命令作為“參數(shù)”,通過用戶的默認shell程序,而不是作為“登錄”shell程序,這是主要的不同。當您在命令行上指定要執(zhí)行的命令時,使用exec channel:
例如:
ssh user@host command
command就是發(fā)送完指令,連接就會斷開。invoke_shell則是長連接,保持狀態(tài)。
exec_command() 操作
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(
hostname='127.1.1.12',
port=22,
username='root',
password='aa**********',
timeout=5
)
while True:
cmdline = input("command: ")
stdin, stdout, stderr = ssh.exec_command(cmdline)
for row in stdout.readlines():
row = row.replace('\r', '').replace('\n', '').replace('\t', '')
print(row)
invoke_shell() 操作
代碼示例:
import paramiko
# 建立一個socket
trans = paramiko.Transport(('127.0.1.66', 22))
# 啟動一個客戶端
trans.start_client()
# 如果使用用戶名和密碼登錄
trans.auth_password(username='root', password='aa********')
# 打開一個通道
channel = trans.open_session()
# 獲取終端
channel.get_pty()
# 激活終端,這樣就可以登錄到終端了,就和我們用類似于xshell登錄系統(tǒng)一樣
channel.invoke_shell()
results = channel.recv(1024000)
print(f"輸出1: {results.decode()}")
channel.send("ll\n")
while True:
results2 = channel.recv(1024000)
print(f"輸出2: {results2.decode()}")到此這篇關于Python Paramiko模塊中exec_command()和invoke_shell()兩種操作區(qū)別的文章就介紹到這了,更多相關Python exec_command()和invoke_shell()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python Web框架Django的模型和數(shù)據(jù)庫遷移詳解
Django 是一個極其強大的 Python Web 框架,它提供了許多工具和特性,能夠幫助我們更快速、更便捷地構(gòu)建 Web 應用,在本文中,我們將會關注 Django 中的模型(Models)和數(shù)據(jù)庫遷移(Database Migrations)這兩個核心概念,需要的朋友可以參考下2023-08-08
Django使用視圖動態(tài)輸出CSV以及PDF的操作詳解
這篇文章主要介紹了Django 如何使用視圖動態(tài)輸出 CSV 以及 PDF,我們需要用到 python 的 csv 和 reportLab 庫,通過django視圖來定義輸出我們需要的 csv 或者 pdf 文件,需要的朋友可以參考下2024-06-06

