用的昨天剛接觸到的庫,在windows下通過paramiko來登錄linux系統(tǒng)并執(zhí)行了幾個命令,基本算是初試成功,后面會接著學習的。
代碼:
>>> import paramiko>>> ssh = paramiko.SSHClient()>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())>>> ssh.connect('10.104.6.8',username = 'xiaopeng',password='******')>>> cmd = 'cd'  #進入用戶目錄home>>> stdin,stdout,stderr = ssh.exec_command(cmd)>>> cmd = 'ls >test' #管道,ls命名的輸出到文件test里面>>> stdin,stdout,stderr = ssh.exec_command(cmd)>>> cmd = 'cat test' # 顯示test的內(nèi)容,即ls命名的結(jié)果>>> stdin,stdout,stderr = ssh.exec_command(cmd)>>> print stdout.readlines()  #結(jié)果 漢字用的字符顯示['code/n', 'Desktop/n', 'order.cpp/n', 'python/n', 'test/n', '/xe5/x85/xac/xe5/x85/xb1/xe7/x9a/x84/n', '/xe6/xa8/xa1/xe6/x9d/xbf/n', '/xe8/xa7/x86/xe9/xa2/x91/n', '/xe5/x9b/xbe/xe7/x89/x87/n', '/xe6/x96/x87/xe6/xa1/xa3/n', '/xe4/xb8/x8b/xe8/xbd/xbd/n', '/xe9/x9f/xb3/xe4/xb9/x90/n']這里我們都會發(fā)現(xiàn),使用exec_command('cd dirname')時并不會切換目錄,execute_command() 是a single session,每次執(zhí)行完后都要回到缺省目錄。所以可以 .execute_command('cd /var; pwd')。
python里面的paramiko模塊,用這個實現(xiàn)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!']#你要執(zhí)行的命令列表   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.利用多線程,同時發(fā)出登錄請求,同時去連接電腦,這樣速度快很多,我試了一下,如果不用多線程,直接一個一個挨著執(zhí)行的話,大約5~10秒鐘才能對一臺電腦操作完,具體時間要根據(jù)命令的來決定,如果是軟件安裝或者卸載時間要更長一些。這樣下來怎么也要一二十分鐘,用多線程后就快多了,所有的命令執(zhí)行完用了不到2分鐘!
2.最好用root用戶登錄,因為安裝或者卸載軟件的時候如果用普通用戶又會提示輸入密碼,這樣又多了一次交互,處理起來就比較麻煩!安裝軟件時apt-get install xxx 最好加上“-y”參數(shù),因為有時安裝或刪除軟件時提示是否繼續(xù)安裝或卸載,這又是一次自動交互!加上那個參數(shù)后就沒有人機交互了。
3.循環(huán)時循環(huán)所有ip,因為計算機的ip是路由器自動分配的,保險起見,最好全部都執(zhí)行,保證沒有遺漏的主機
4.遠端執(zhí)行命令時如果有交互,可以這樣用 stdin.write("Y")來完成交互,“Y”就是輸入“Y”。
5.把所有的命令放到一個列表里面,遍歷列表可以依次執(zhí)行列表里面的命令
新聞熱點
疑難解答
圖片精選