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