91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么實現ssh批量登錄

發布時間:2021-08-07 11:28:35 來源:億速云 閱讀:158 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關Python中怎么實現ssh批量登錄,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

局域網內有一百多臺電腦,全部都是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 ssh3(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=ssh3,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服務器并讓其開機自動執行。

上述就是小編為大家分享的Python中怎么實現ssh批量登錄了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山东| 微山县| 桐庐县| 紫金县| 万荣县| 西充县| 无棣县| 昆明市| 清远市| 弥勒县| 潢川县| 都安| 拜城县| 大同县| 江安县| 平果县| 洛川县| 科技| 伊金霍洛旗| 鸡西市| 新野县| 明溪县| 桐乡市| 柳河县| 都兰县| 青川县| 岳池县| 黎川县| 淳安县| 府谷县| 汉寿县| 庆云县| 行唐县| 汉中市| 安吉县| 贵南县| 平湖市| 普宁市| 台东县| 嵊州市| 石楼县|