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

首頁 > 系統 > Linux > 正文

python通過SSH登陸linux并操作的實現

2024-08-28 00:02:14
字體:
來源:轉載
供稿:網友

用的昨天剛接觸到的庫,在windows下通過paramiko來登錄linux系統并執行了幾個命令,基本算是初試成功,后面會接著學習的。

代碼:

>>> 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的內容,即ls命名的結果>>> stdin,stdout,stderr = ssh.exec_command(cmd)>>> print stdout.readlines()  #結果 漢字用的字符顯示['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']

這里我們都會發現,使用exec_command('cd dirname')時并不會切換目錄,execute_command() 是a single session,每次執行完后都要回到缺省目錄。所以可以 .execute_command('cd /var; pwd')。

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.把所有的命令放到一個列表里面,遍歷列表可以依次執行列表里面的命令

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 故城县| 丹凤县| 铁力市| 陇南市| 和林格尔县| 巫山县| 苏尼特右旗| 华阴市| 苍溪县| 阳曲县| 晋宁县| 广昌县| 大兴区| 忻州市| 旺苍县| 天柱县| 金乡县| 乐至县| 赣州市| 桓台县| 民县| 方正县| 江阴市| 特克斯县| 彩票| 民权县| 巫山县| 融水| 常德市| 屏南县| 扶绥县| 黔西县| 乃东县| 应用必备| 出国| 禄劝| 长泰县| 弋阳县| 宣威市| 色达县| 通山县|