国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

ssh批量登錄并執(zhí)行命令的python實(shí)現(xiàn)代碼

2020-02-23 04:46:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
局域網(wǎng)內(nèi)有一百多臺(tái)電腦,全部都是linux操作系統(tǒng),所有電腦配置相同,系統(tǒng)完全相同(包括用戶名和密碼),ip地址是自動(dòng)分配的。現(xiàn)在有個(gè)任務(wù)是在這些電腦上執(zhí)行某些命令,者說(shuō)進(jìn)行某些操作,比如安裝某些軟件,拷貝某些文件,批量關(guān)機(jī)等。如果一臺(tái)一臺(tái)得手工去操作,費(fèi)時(shí)又費(fèi)力,如果要進(jìn)行多個(gè)操作就更麻煩啦。
或許你會(huì)想到網(wǎng)絡(luò)同傳, 網(wǎng)絡(luò)同傳是什么?就是在一臺(tái)電腦上把電腦裝好,配置好,然后利用某些軟件,如“聯(lián)想網(wǎng)絡(luò)同傳”把系統(tǒng)原樣拷貝過(guò)去,在裝系統(tǒng)時(shí)很有用,只要在一臺(tái)電腦上裝好,同傳以后所有的電腦都裝好操作系統(tǒng)了,很方便。同傳要求所有電腦硬件完全相同,在聯(lián)想的電腦上裝的系統(tǒng)傳到方正電腦上肯定會(huì)出問(wèn)題的。傳系統(tǒng)也是很費(fèi)時(shí)間的,根據(jù)硬盤大小,如果30G硬盤,100多臺(tái)電腦大約要傳2個(gè)多小時(shí),反正比一臺(tái)一臺(tái)地安裝快!但是如果系統(tǒng)都傳完了,發(fā)現(xiàn)忘了裝一個(gè)軟件,或者還需要做些小修改,再同傳一次可以,但是太慢,傳兩次半天時(shí)間就沒(méi)了。這時(shí)候我們可以利用ssh去控制每臺(tái)電腦去執(zhí)行某些命令。
先讓我們回憶一下ssh遠(yuǎn)程登錄的過(guò)程:首先執(zhí)行命令 ssh username@192.168.1.x ,第一次登錄的時(shí)候系統(tǒng)會(huì)提示我們是否要繼續(xù)連接,我們要輸入“yes”,然后等一段時(shí)間后系統(tǒng)提示我們輸入密碼,正確地輸入密碼之后我們就能登錄到遠(yuǎn)程計(jì)算機(jī),然后我們就能執(zhí)行命令了。我們注意到這里面有兩次人機(jī)交互,一次是輸入‘yes',另一次是輸入密碼。就是因?yàn)橛袃纱谓换ノ覀儾荒芎?jiǎn)單的用某些命令去完成我們的任務(wù)。我們可以考慮把人機(jī)交互變成自動(dòng)交互,python的pexpect模塊可以幫我們實(shí)現(xiàn)自動(dòng)交互。下面這段代碼是用pexpect實(shí)現(xiàn)自動(dòng)交互登錄并執(zhí)行命令的函數(shù):
代碼如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
def ssh_cmd(ip, passwd, cmd):
ret = -1
ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))
try:
i = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5)
if i == 0 :
ssh.sendline(passwd)
elif i == 1:
ssh.sendline('yes/n')
ssh.expect('password: ')
ssh.sendline(passwd)
ssh.sendline(cmd)
r = ssh.read()
print r
ret = 0
except pexpect.EOF:
print "EOF"
ssh.close()
ret = -1
except pexpect.TIMEOUT:
print "TIMEOUT"
ssh.close()
ret = -2
return ret

利用pexpect模塊我們可以做很多事情,由于他提供了自動(dòng)交互功能,因此我們可以實(shí)現(xiàn)ftp,telnet,ssh,scp等的自動(dòng)登錄,還是比較實(shí)用的。根據(jù)上面的代碼相信讀者已經(jīng)知道怎么實(shí)現(xiàn)了(python就是那么簡(jiǎn)單!)。
用上面的代碼去完成任務(wù)還是比較費(fèi)時(shí)間的,因?yàn)槌绦蛞却詣?dòng)交互出現(xiàn),另外ubuntu用ssh連接就是比較慢,要進(jìn)行一系列的驗(yàn)證,這樣才體現(xiàn)出ssh的安全。我們要提高效率,在最短的時(shí)間內(nèi)完成。后來(lái)我發(fā)現(xiàn)了python里面的paramiko模塊,用這個(gè)實(shí)現(xiàn)ssh登錄更加簡(jiǎn)單。看下面的代碼:
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 应用必备| 宁化县| 德安县| 托里县| 云安县| 凉城县| 贡嘎县| 弋阳县| 湘乡市| 阜平县| 临泽县| 本溪| 巴林右旗| 嵊州市| 盖州市| 阜康市| 揭阳市| 宁陕县| 井研县| 广昌县| 香港 | 牡丹江市| 登封市| 奉新县| 定兴县| 左云县| 建水县| 增城市| 柳江县| 买车| 梅河口市| 徐闻县| 敦煌市| 葫芦岛市| 广宗县| 莫力| 青冈县| 屯昌县| 莲花县| 荥经县| 丰县|