使用prarmiko模塊切換root執(zhí)行命令

使用prarmiko模塊切換root執(zhí)行命令

ID:42621492

大小:15.53 KB

頁數(shù):6頁

時(shí)間:2019-09-19

使用prarmiko模塊切換root執(zhí)行命令_第1頁
使用prarmiko模塊切換root執(zhí)行命令_第2頁
使用prarmiko模塊切換root執(zhí)行命令_第3頁
使用prarmiko模塊切換root執(zhí)行命令_第4頁
使用prarmiko模塊切換root執(zhí)行命令_第5頁
資源描述:

《使用prarmiko模塊切換root執(zhí)行命令》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、Paramiko模塊是非常優(yōu)秀的ssh連接庫。通常使用paramiko.SSHClient類型的exec_command來執(zhí)行命令,返回一個(gè)包含了代表標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤的三個(gè)元素的元祖。通過操作這三個(gè)ChannelFile對(duì)象可以獲取到命令的標(biāo)準(zhǔn)輸出,以及命令的退出狀態(tài),并且如果命令沒有執(zhí)行完成,獲取標(biāo)注輸出或退出狀態(tài)時(shí),進(jìn)程將被阻塞,直到命令執(zhí)行完成,還可以使用標(biāo)準(zhǔn)輸入完成簡單的交互操作,具體的使用方式,參見Paramiko使用exec_command很方便,但也有不足之處,很多l(xiāng)inux環(huán)境都是禁止root直接登錄的,而使用exec_command無法完成su–root這種

2、交互方式的切換命令,執(zhí)行時(shí)進(jìn)程將被永久阻塞。invoke_shell方法,用于創(chuàng)建一個(gè)子shell進(jìn)程,這樣所有的操作都可以在該子shell中進(jìn)程,su切換用戶操作不受影響,但該方法沒有exec_command那種方便的ChannelFile對(duì)象,所有的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤內(nèi)容通過invoke_shell返回對(duì)象的recv方法來獲取,每一次調(diào)用recv只會(huì)從上一次返回的地方開始返回,也沒有直接獲取命令退出狀態(tài)的方法,不過這些缺點(diǎn)可以通過代碼來實(shí)現(xiàn)。importparamikoimporttimedef_shell_exec(shell,cmd,sleep,is_exec=True):ifi

3、s_exec:#執(zhí)行shell命令shell.send(cmd+'')time.sleep(sleep)#recv方法返回收集到的shell命令的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤。#參數(shù)為返回多少個(gè)自己節(jié)數(shù)的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤,值應(yīng)該大于實(shí)際的返回,這樣才能保證輸出的完整stdout=shell.recv(1024*100)#按行分割得到的信息out_list=stdout.decode().split('')returnout_listdefmain():ssh=paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.Miss

4、ingHostKeyPolicy())ssh.connect('192.168.1.28',22,'test','huawei')#invoke_shell方法,創(chuàng)建一個(gè)子shell,所有的命令都在該shell中進(jìn)行。shell=ssh.invoke_shell()print('Begintosuroot...')out_list=_shell_exec(shell,'su-root',1)last_str=out_list[len(out_list)-1].strip()#獲取的linux系統(tǒng)的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤按行分割后#第一行內(nèi)容為傳遞的linux命令,最后一行在無交互時(shí),內(nèi)容應(yīng)該

5、為PS1變量的值#否則應(yīng)該是交互的輸出信息,切換root為交互操作,最后一行的內(nèi)容應(yīng)該為"Password:"ifnotlast_str.endswith('Password:'):raiseValueError("Failedtoexecsuroot")out_list=_shell_exec(shell,'huawei',5)result_str=out_list[len(out_list)-2].strip()#輸入密碼后,交互完成,此時(shí)最后一行應(yīng)該為PS1變量的值#單數(shù)第二行如何出現(xiàn)failure內(nèi)容,則表示root密碼輸入錯(cuò)誤,切換失敗ifresult_str.endswith

6、('failure'):raiseValueError("Authenticationfailure,pleasecheckroot'spassword")print('Successfully')cmd_list=list()#第一條命令是更改PS1變量,即標(biāo)識(shí)符的樣式#每條命令執(zhí)行完成后,都會(huì)返回到標(biāo)識(shí)符,通過判斷命令輸出的最后是否等于PS1即可判斷命令是否執(zhí)行完成cmd_list.append('exportPS1="[\u]#";echo$?')cmd_list.append('whoami;echo$?')cmd_list.append('pwd;echo$?')cmd_li

7、st.append('cd/opt;bashtest.sh;echo$?')cmd_list.append('cd/opt;bashtest2.sh;echo$?')cmd_list.append('pwd;echo$?')#逐條執(zhí)行數(shù)組中的命令print('Begintoexeccommand...')forcmdincmd_list:print('"{0}"...'.format(cmd))out_list=list()#聲明一

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。