python ssh 遠程登錄路由器執行命令_ssh批量登錄并執行命令(python實現)

局域網內有一百多臺電腦,全部都是linux操作系統,所有電腦配置相同,系統完全相同(包括用戶名和密碼),ip地址是自動分配的。現在有個任務是在這些電腦上執行某些命令,者說進行某些操作,比如安裝某些軟件,拷貝某些文件,批量關機等。如果一臺一臺得手工去操作,費時又費力,如果要進行多個操作就更麻煩啦。

或許你會想到網絡同傳, 網絡同傳是什么?就是在一臺電腦上把電腦裝好,配置好,然后利用某些軟件,如“聯想網絡同傳”把系統原樣拷貝過去,在裝系統時很有用,只要在一臺電腦上裝好,同傳以后所有的電腦都裝好操作系統了,很方便。同傳要求所有電腦硬件完全相同,在聯想的電腦上裝的系統傳到方正電腦上肯定會出問題的。傳系統也是很費時間的,根據硬盤大小,如果30G硬盤,100多臺電腦大約要傳2個多小時,反正比一臺一臺地安裝快!但是如果系統都傳完了,發現忘了裝一個軟件,或者還需要做些小修改,再同傳一次可以,但是太慢,傳兩次半天時間就沒了。這時候我們可以利用ssh去控制每臺電腦去執行某些命令。

先讓我們回憶一下ssh遠程登錄的過程:首先執行命令 ssh username@192.168.1.x ,第一次登錄的時候系統會提示我們是否要繼續連接,我們要輸入“yes”,然后等一段時間后系統提示我們輸入密碼,正確地輸入密碼之后我們就能登錄到遠程計算機,然后我們就能執行命令了。我們注意到這里面有兩次人機交互,一次是輸入‘yes’,另一次是輸入密碼。就是因為有兩次交互我們不能簡單的用某些命令去完成我們的任務。我們可以考慮把人機交互變成自動交互,python的pexpect模塊可以幫我們實現自動交互。下面這段代碼是用pexpect實現自動交互登錄并執行命令的函數:

#!/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模塊我們可以做很多事情,由于他提供了自動交互功能,因此我們可以實現ftp,telnet,ssh,scp等的自動登錄,還是比較實用的。根據上面的代碼相信讀者已經知道怎么實現了(python就是那么簡單!)。

用上面的代碼去完成任務還是比較費時間的,因為程序要等待自動交互出現,另外ubuntu用ssh連接就是比較慢,要進行一系列的驗證,這樣才體現出ssh的安全。我們要提高效率,在最短的時間內完成。后來我發現了python里面的paramiko模塊,用這個實現ssh登錄更加簡單。看下面的代碼:

#-*-?coding:?utf-8?-*-

#!/usr/bin/python

import?paramiko

import?threading

def?ssh2(ip,username,passwd,cmd):

try:

ssh?=?paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(ip,22,username,passwd,timeout=5)

for?m?in?cmd:

stdin,?stdout,?stderr?=?ssh.exec_command(m)

#? ? ? ? ? ?stdin.write("Y")???#簡單交互,輸入?‘Y’

out?=?stdout.readlines()

#屏幕輸出

for?o?in?out:

print?o,

print?'%s\tOK\n'%(ip)

ssh.close()

except?:

print?'%s\tError\n'%(ip)

if?__name__=='__main__':

cmd?=?['cal','echo?hello!']#你要執行的命令列表

username?=?""??#用戶名

passwd?=?""????#密碼

threads?=?[]???#多線程

print?"Begin......"

for?i?in?range(1,254):

ip?=?'192.168.1.'+str(i)

a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))

a.start()

上面的程序還是有些技巧的:

1.利用多線程,同時發出登錄請求,同時去連接電腦,這樣速度快很多,我試了一下,如果不用多線程,直接一個一個挨著執行的話,大約5~10秒鐘才能對一臺電腦操作完,具體時間要根據命令的來決定,如果是軟件安裝或者卸載時間要更長一些。這樣下來怎么也要一二十分鐘,用多線程后就快多了,所有的命令執行完用了不到2分鐘!

2.最好用root用戶登錄,因為安裝或者卸載軟件的時候如果用普通用戶又會提示輸入密碼,這樣又多了一次交互,處理起來就比較麻煩!安裝軟件時apt-get install xxx 最好加上“-y”參數,因為有時安裝或刪除軟件時提示是否繼續安裝或卸載,這又是一次自動交互!加上那個參數后就沒有人機交互了。

3. 循環時循環所有ip,因為計算機的ip是路由器自動分配的,保險起見,最好全部都執行,保證沒有遺漏的主機

4.遠端執行命令時如果有交互,可以這樣用?stdin.write("Y")來完成交互,“Y”就是輸入“Y”。

5.把所有的命令放到一個列表里面,遍歷列表可以依次執行列表里面的命令

6.為了更好的進行控制,最好在電腦上提前把root用戶打開,裝好ssh服務器并讓其開機自動執行。

博主ma6174對本博客文章(除轉載的)享有版權,未經許可不得用于商業用途。轉載請注明出處http://www.cnblogs.com/ma6174/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446071.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446071.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函數

參考鏈接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 函數介紹 static struct crypto_alg *crypto_alg_lookup(const char *name, u32 type,u32 mask) {struct crypto_alg *alg;u32 test 0;if (!((type | mask) & CRYPTO_ALG_TESTED))…

linux加密框架 crypto 算法管理 - 動態和靜態算法管理

參考鏈接 Linux加密框架的算法管理(三)_家有一希的博客-CSDN博客 動態和靜態算法管理 靜態算法 加密框架中的算法分為靜態算法和動態算法兩種,其中靜態算法指的是以"算法名.ko"形式存在的靜態編譯的算法模塊,如aes.k…

3分鐘入門python_3分鐘帶你了解世界第一語言Python 入門上手也這么簡單!

一、Python入門1. Python爬蟲入門一之綜述Python爬蟲入門二之爬蟲基礎了解Python爬蟲入門三之Urllib庫的基本使用Python爬蟲入門四之Urllib庫的高級用法Python爬蟲入門五之URLError異常處理Python爬蟲入門六之Cookie的使用Python爬蟲入門七之正則表達式Python爬蟲入門八之Beaut…

linux加密框架 crypto 算法管理 - 算法檢測

參考鏈接 Linux加密框架的算法管理(四)_家有一希的博客-CSDN博客 函數介紹 如前所述,無論是靜態算法還是動態算法,算法注冊的最后一步都是進行算法正確性檢驗,一般流程是先調用__crypto_register_alg函數進行通用的算…

select選中的值_selenium下拉框處理(select)

前言 web自動化中,常見的場景還有一個下拉框的選擇,哪么在selenium中如何做下拉框的操作呢?selectselect在HTML中表示元素名,可創建單選或多選菜單。HTML中select長什么樣子:select在HTML中元素名,下面有選…

linux加密框架 crypto 算法管理 - 創建哈希算法實例

crypto_alloc_ahash函數 加密框架中的哈希算法可以是同步方式實現的也可以是異步方式實現的,但是算法應用不關注哈希算法的實現方式,關注的是哈希算法提供的算法接口。為實現統一管理,加密框架默認哈希算法的實現方式為異步方式,…

發票管理軟件_企業為什么需要ERP企業管理軟件?

對于一個制造企業來說,生產是企業最大的動力,而生產也需要進行優化管理,一個好的生產管理方式會帶給企業巨大的發展空間和利潤價值。對于一個制造企業來說,生產是企業最大的動力,而生產也需要進行優化管理,…

python 畫風場 scipy_Python數據分析及可視化實例之Scipy

強大到沒有朋友的科學計算庫,不知道怎么介紹ta!大牛張若愚出了厚本的《Python 科學計算》第二版里面包羅萬象,就不做搬運工了,盡快開工pandas。來一彈在NLP自然語言處理中用到的稀疏矩陣處理:# coding: utf-8# # 稀疏矩…

linux加密框架 crypto 算法管理 - 應用角度講解加密框架的運行流程

參考鏈接 Linux加密框架的應用示例(一)_家有一希的博客-CSDN博客 本文大綱 本節將從應用角度說明加密框架的運行流程,包括加密框架如何管理算法、如何動態創建算法,應用模塊如何創建算法實例、如何通過算法實例調用算法接口等。…

java 累進計費率計算_設計費400萬,繳納所得稅100萬,如何籌劃

很多公司老板都會把利潤放在第一位,照理說這是沒錯的,公司要盈利才能繼續經營下去。我國有很多針對小微企業的政策,盈利不高的情況下,基本不會去考慮納稅問題,也沒有多少稅收壓力。但是對一些暴利的服務型行業、軟件設…

linux加密框架 crypto 算法管理 - 哈希算法應用實例

參考鏈接 Linux加密框架應用示例(二)_家有一希的博客-CSDN博客linux加密框架 crypto 算法管理 - 應用角度講解加密框架的運行流程_CHYabc123456hh的博客-CSDN博客 在應用模塊中創建并初始化哈希算法實例 假設某個SA配置使用的認證算法為"hmac(md5…

guido python正式發布年份_Python語言適合哪些領域的計算問題? (1.3分)_學小易找答案...

【單選題】關于Python中的復數,下列說法錯誤的是 (1.3分)【多選題】藥物作用的基本規律包括?【單選題】Python 中,以下哪個賦值操作符是錯誤的? (1.3分)【單選題】哪個選項是下面代碼的執行結果? s "abcd1234" print ( s . find ( "cd" )) (1.3分)【填…

Linux加密框架 crypto crypto_larval | crypto_larval_alloc | __crypto_register_alg 介紹

參考鏈接 Lniux加密框架中的主要數據結構(五)_家有一希的博客-CSDN博客crypto_larval struct crypto_larval {struct crypto_alg alg;struct crypto_alg *adult;struct completion completion;u32 mask; };結構體名叫 crypto_larval (算法幼…

好玩的腳本代碼大全_Github | 推薦一個Python腳本集合項目

點擊上方"藍字"關注我們Python大數據分析記錄 分享 成長用python寫小腳本是一件好玩的事情,因為不是個大活兒,而且能解決眼邊前十分繁瑣的事情,這種輕松且便宜的代碼頗受人民群眾的歡迎~有點生活小妙招的意味大家較為熟知的腳本…

linux加密框架 crypto 算法管理 - 算法查找接口

參考鏈接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg_CHYabc123456hh的博客-CSDN博客linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_mod_lookup_CHYabc123456hh的…

python中以下關于列表描述錯誤的_10. 以下關于列表操作的描述,錯誤的是:_學小易找答案...

【單選題】Python 語句 a1211.21 print(type(a)) 的輸出結果為( )【單選題】Python語句序列"s1 [4, 5, 6]; s2 s1; s1[1]0; print(s2)"的運行結果是( )。【填空題】Python語句print(%d%%%d%(3/2, 3%2))的運行結果是( 1 )。【單選題】python語句print(type(123))的數…

寫論文注意事項

參考鏈接 給研究生修改了一篇論文后,該985博導幾近崩潰…… 重點分析 摘要與結論幾乎重合 這一條是我見過研究生論文中最常出現的事情,很多情況下,他們論文中摘要部分與結論部分重復率超過70%。對于摘要而言,首先要用一小句話引…

xml模糊查詢語句_2Mybatis學習筆記07:動態SQL語句(原創,轉載請注明來源)

開發環境:硬件環境:Windows10JDK 1.8; 軟件環境:JavaEclipseMybatismaven3.6tomcat8.0Postgresql 10.6; 用到的jar包: asm-3.3.1.jar cglib-2.2.2.jar commons-logging-1.1.1.jar javassist-3.17.1-GA.jar …

硬件密碼組件的硬件結構、作用及實現應用設計

引 言 1 硬件密碼組件的概念 密碼技術是解決信息安全問題的核心技術。要實現信息的保密性、完整性、可控性和不可否認性等安全要求,都離不開密碼技術的運用。在具體的信息安全系統中,密碼技術的運用可以基于軟件密碼組件(簡稱為SCM&#xf…

sql倒序查詢語句_SQL丨1.基本查詢語句復習

此為自用查詢語句1.selectSELECT column1,column2 FROM table1;常用的格式慣例:大寫了SELECT和FROM,而將表名和列名小寫;通常在列名中使用下劃線,避免使用空格;在每個語句末尾添加分號;SQL不區分大小寫。2.…