成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python實現ssh批量登錄并執行命令

開發 后端
網絡同傳是什么?就是在一臺電腦上把電腦裝好,配置好,然后利用某些軟件,如“聯想網絡同傳”把系統原樣拷貝過去,在裝系統時很有用,只要在一臺電腦上裝好,同傳以后所有的電腦都裝好操作系統了,很方便。

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

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

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

  1. #!/usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3.  
  4. import pexpect  
  5.  
  6. def ssh_cmd(ip, passwd, cmd):  
  7.     ret = -1 
  8.     ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))  
  9.     try:  
  10.         i = ssh.expect(['password:''continue connecting (yes/no)?'], timeout=5)  
  11.         if i == 0 :  
  12.             ssh.sendline(passwd)  
  13.         elif i == 1:  
  14.             ssh.sendline('yes\n')  
  15.             ssh.expect('password: ')  
  16.             ssh.sendline(passwd)  
  17.         ssh.sendline(cmd)  
  18.         r = ssh.read()  
  19.         print r  
  20.         ret = 0 
  21.     except pexpect.EOF:  
  22.         print "EOF" 
  23.         ssh.close()  
  24.         ret = -1 
  25.     except pexpect.TIMEOUT:  
  26.         print "TIMEOUT" 
  27.         ssh.close()  
  28.         ret = -2   
  29.     return ret 

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

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

  1. #-*- coding: utf-8 -*-  
  2. #!/usr/bin/python   
  3. import paramiko  
  4. import threading  
  5. def ssh2(ip,username,passwd,cmd):  
  6.     try:  
  7.         ssh = paramiko.SSHClient()  
  8.         ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  
  9.         ssh.connect(ip,22,username,passwd,timeout=5)  
  10.         for m in cmd:  
  11.             stdin, stdout, stderr = ssh.exec_command(m)  
  12. #           stdin.write("Y")   #簡單交互,輸入 ‘Y’   
  13.             out = stdout.readlines()  
  14.             #屏幕輸出  
  15.             for o in out:  
  16.                 print o,  
  17.         print '%s\tOK\n'%(ip)  
  18.         ssh.close()  
  19.     except :  
  20.         print '%s\tError\n'%(ip)  
  21. if __name__=='__main__':  
  22.     cmd = ['cal','echo hello!']#你要執行的命令列表  
  23.     username = ""  #用戶名  
  24.     passwd = ""    #密碼  
  25.     threads = []   #多線程  
  26.     print "Begin......" 
  27.     for i in range(1,254):  
  28.         ip = '192.168.1.'+str(i)  
  29.         a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))   
  30.         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服務器并讓其開機自動執行。

原文鏈接:http://www.cnblogs.com/ma6174/archive/2012/05/25/2508378.html

【編輯推薦】

  1. Python模擬163登陸獲取郵件列表
  2. Python編碼時應該注意的幾件事情
  3. Python實現刪除目錄下相同文件
  4. 學好Python必讀的幾篇文章
  5. Python對軟件開發人員很重要?
責任編輯:張偉 來源: ma6174的博客
相關推薦

2022-11-18 08:55:33

2021-03-22 16:45:58

服務器命令

2009-12-29 14:36:29

Ubuntu cron

2011-08-22 10:40:07

SSH命令SSH命令

2019-08-30 07:24:16

2019-04-25 09:52:38

SSHLinux服務器

2020-09-21 05:53:28

Linux命令&

2014-07-31 18:23:41

Process

2019-08-28 09:04:02

Go語言Python操作系統

2024-09-09 08:36:36

Java操作遠程服務器

2018-01-18 10:57:48

Linux服務器命令

2011-02-23 10:57:27

Konqueror

2024-06-20 12:35:36

2017-12-11 09:34:40

Linux啟動或重啟命令與腳本

2020-06-04 17:00:37

Linux命令腳本

2017-03-10 10:37:16

Linux命令腳本

2022-09-27 10:07:01

要使用 source

2015-10-21 11:03:21

ssh登錄Linux

2024-01-17 13:56:00

Redis節點映射關系

2010-11-16 11:50:21

oracle命令行登錄
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级大片 | 亚洲精品一区av在线播放 | 国产日韩欧美在线 | 午夜精品一区二区三区免费视频 | 欧美精品在线一区 | 最新国产在线 | 久操伊人 | 91精品久久久久久久久久入口 | 免费观看黄网站 | 99久久精品一区二区毛片吞精 | 涩涩视频网站在线观看 | 精品乱子伦一区二区三区 | 色橹橹欧美在线观看视频高清 | 亚洲一区二区成人 | 中文字幕丁香5月 | 亚洲视频一区在线观看 | 成人三级在线观看 | 久久久久久艹 | h视频免费观看 | 欧美黄色网 | 国产亚洲日本精品 | 天天夜夜人人 | 亚洲天堂影院 | 久久a久久 | 亚洲欧美一区二区三区视频 | 国产成人99久久亚洲综合精品 | 一区二区三区观看视频 | 色综合天天网 | 成人精品一区二区三区中文字幕 | 亚洲精品精品 | 伊人性伊人情综合网 | 一区中文字幕 | 精品国产乱码久久久久久老虎 | 久久精品二区 | 日韩欧美黄色 | 久久综合一区 | www.成人免费视频 | 国产成人一区二区三区 | 亚洲欧美日韩在线不卡 | 欧美激情久久久 | 91社区在线观看播放 |