python用parammiko模塊實現linux的遠程操作

parammiko  可以實現遠程的帶密碼登錄,解決ssh遠程登陸需要交互的問題 (當然很多其他的,如tcl也可以)。但這個用python做比較簡單

   

1、parammiko 的安裝

  1.1、依賴模塊

  PyCrypto - The Python Cryptography Toolkit

  1.2下載地址$ wget http://www.lag.net/paramiko/download/paramiko-1.7.6.tar.gz

  $ wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.4.1.tar.gz

  http://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.0.1.tar.gz#md5=277aa00f27cfbb08f21063f4beb6de59

  1.3、安裝

  1、安裝pycrypto

  $ tar -zxvf pycrypto-2.0.1.tar.gz $ cd pycrypto-2.0.1 $ python setup.py build $ sudo python setup.py install

  2、安裝paramiko $ tar -zxvf paramiko-1.7.6.tar.gz $ cd paramiko-1.7.6 $ python setup.py build $ sudo python setup.py install

  1.4、可能遇到的問題及解決「基於CentOS,Python 2.4.3 」

  如果在安裝pycrypto2.0.1時發生如下錯誤

   view plain <strong>[/pycrypto-2.0.1]$ sudo python setup.py build running build running build_py running build_ext building ' Cryp to.Hash.MD2' extension gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexce ptions -fstack-protector ——param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fPIC -Isrc/ -I/usr/include/pyt hon2.4 -c src/MD2.c -o build/temp.linux-x86_64-2.4/src/MD2.o unable to execute gcc: No such file or directory error: comma nd 'gcc' failed with exit status 1</strong>解決方案1:

  可能是缺少pyton-dev安裝包導致

  $  yum list | grep python-dev

  $ yum -y install python-dev*     「需root權限執行」

  執行後,重新安裝即可成功。

  解決方案2:

  如果解決方案1還不能解決問題,可能是“gcc”沒有安裝或者不再PATH中

  $ whereis gcc         「檢查gcc」

  $  echo $PATH        「檢查gcc是否在PATH中」

  如果沒有安裝 “gcc” ,執行如下命令

  $ yum list | grep gcc

  $ sudo yum install -y gcc.x86_64

  執行後,重新安裝即可。


具體例子:

#-*- 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服務器並讓其開機自動執行。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章