Python Paramiko模塊中exec_command()和invoke_shell()兩種操作區(qū)別
前言
Paramiko 是 Python 語言的一個(gè) SSH 客戶端。可以遠(yuǎn)程連接Linux服務(wù)器,通過 python 對(duì) Linux 進(jìn)行操作,可以實(shí)現(xiàn)進(jìn)行對(duì)遠(yuǎn)程服務(wù)器進(jìn)行下載和上傳文件操作。
- exec_command()函數(shù)是將服務(wù)器執(zhí)行完的結(jié)果一次性返回給你;
- invoke_shell()函數(shù)類似shell終端,可以將執(zhí)行結(jié)果分批次返回,看到任務(wù)的執(zhí)行情況,不會(huì)因?yàn)閳?zhí)行一個(gè)很長(zhǎng)的腳本而不知道是否執(zhí)行成功
exec_command 和 invoke_shell 區(qū)別
invoke_shell 使用 SSH shell channel,而 exec_command 使用 SSH exec channel
shell channel在正常情況下,SSH終端客戶端(例如PuTTY)會(huì)使用shell channel
Shell channel執(zhí)行登錄Shell(就像您使用SSH終端客戶端登錄一樣)。然后,shell程序?qū)@示命令提示符,并等待客戶端/用戶鍵入命令。
Shell channel的目的是實(shí)現(xiàn)交互式Shell會(huì)話。那是很少做的事情。如果這樣做,通常會(huì)希望使用終端仿真(Paramiko invoke_shell會(huì)執(zhí)行此操作,但實(shí)際上可以在不進(jìn)行終端仿真的情況下打開shell channel)。
exec channel
exec channel的目的是使命令執(zhí)行自動(dòng)化。因此,通常您不想使用終端仿真,以避免使用該命令執(zhí)行諸如分頁,著色和主要是交互式確認(rèn)之類的操作。
exec命令將命令作為“參數(shù)”,通過用戶的默認(rèn)shell程序,而不是作為“登錄”shell程序,這是主要的不同。當(dāng)您在命令行上指定要執(zhí)行的命令時(shí),使用exec channel:
例如:
ssh user@host command
command就是發(fā)送完指令,連接就會(huì)斷開。invoke_shell則是長(zhǎng)連接,保持狀態(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
# 建立一個(gè)socket
trans = paramiko.Transport(('127.0.1.66', 22))
# 啟動(dòng)一個(gè)客戶端
trans.start_client()
# 如果使用用戶名和密碼登錄
trans.auth_password(username='root', password='aa********')
# 打開一個(gè)通道
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()}")到此這篇關(guān)于Python Paramiko模塊中exec_command()和invoke_shell()兩種操作區(qū)別的文章就介紹到這了,更多相關(guān)Python exec_command()和invoke_shell()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python使用Paramiko庫實(shí)現(xiàn)SSH管理詳解
- python的paramiko模塊基本用法詳解
- Python通過paramiko庫實(shí)現(xiàn)遠(yuǎn)程執(zhí)行l(wèi)inux命令的方法
- Python運(yùn)維自動(dòng)化之paramiko模塊應(yīng)用實(shí)例
- Python中paramiko模塊的基礎(chǔ)操作與排錯(cuò)問題
- Python遠(yuǎn)程SSH庫Paramiko詳細(xì)操作
- python 第三方庫paramiko的常用方式
- Python如何實(shí)現(xiàn)Paramiko的二次封裝
- python 使用paramiko模塊進(jìn)行封裝,遠(yuǎn)程操作linux主機(jī)的示例代碼
- Python paramiko使用方法代碼匯總
相關(guān)文章
Python快速實(shí)現(xiàn)一個(gè)線程池的示例代碼
當(dāng)有多個(gè)?IO?密集型的任務(wù)要被處理時(shí),我們自然而然會(huì)想到多線程。而線程池的實(shí)現(xiàn)也很簡(jiǎn)單,因?yàn)?Python?提供了一個(gè)標(biāo)準(zhǔn)庫?concurrent.futures,已經(jīng)內(nèi)置了對(duì)線程池的支持。所以本篇文章,我們就來詳細(xì)介紹一下該模塊的用法2022-07-07
pandas如何將dataframe中的NaN替換成None
這篇文章主要介紹了pandas如何將dataframe中的NaN替換成None問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
python如何處理matlab的mat數(shù)據(jù)
這篇文章主要介紹了python如何處理matlab的mat數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
python中的內(nèi)置函數(shù)max()和min()及mas()函數(shù)的高級(jí)用法
這篇文章主要介紹了python中的內(nèi)置函數(shù)max()和min()的相關(guān)知識(shí)及python中內(nèi)置函數(shù)max()的高級(jí)用法,需要的朋友可以參考下2018-03-03
pyside6-uic生成py代碼中文為unicode(亂碼)的問題解決方案
這篇文章主要介紹了如何解決pyside6-uic生成py代碼中文為unicode(亂碼)的問題,文中通過代碼和圖文介紹的非常詳細(xì),對(duì)大家解決問題有一定的幫助,需要的朋友可以參考下2024-02-02
Python面向?qū)ο笾惖膬?nèi)置attr屬性示例
這篇文章主要介紹了Python面向?qū)ο笾惖膬?nèi)置attr屬性,結(jié)合實(shí)例形式分析了Python面向?qū)ο笾蓄惖膶傩韵嚓P(guān)定義、賦值、修改等操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-12-12
對(duì)PyQt5的輸入對(duì)話框使用(QInputDialog)詳解
今天小編就為大家分享一篇對(duì)PyQt5的輸入對(duì)話框使用(QInputDialog)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python如何根據(jù)字幕文件自動(dòng)給視頻添加字幕效果
視頻中字幕的重要性不用多說了,下面這篇文章主要給大家介紹了關(guān)于Python如何根據(jù)字幕文件自動(dòng)給視頻添加字幕效果的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02
Python 含參構(gòu)造函數(shù)實(shí)例詳解
這篇文章主要介紹了Python 含參構(gòu)造函數(shù)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05

