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 -fexceptions -fstack-protector ――param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fPIC -Isrc/ -I/usr/include/python2.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: command '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

  执行后,重新安装即可。

具体例子:

[python] view plain copy
  1. #-*- coding: utf-8 -*-

  2. #!/usr/bin/python

  3. import paramiko  

  4. import threading  

  5. def ssh2(ip,username,passwd,cmd):  

  6. try:  

  7.        ssh = paramiko.SSHClient()  

  8.        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  

  9.        ssh.connect(ip,22,username,passwd,timeout=5)  

  10. for m in cmd:  

  11.            stdin, stdout, stderr = ssh.exec_command(m)  

  12. #           stdin.write("Y")   #简单交互,输入 ‘Y’

  13.            out = stdout.readlines()  

  14. #屏幕输出

  15. for o in out:  

  16. print o,  

  17. print'%s\tOK\n'%(ip)  

  18.        ssh.close()  

  19. except :  

  20. print'%s\tError\n'%(ip)  

  21. if __name__=='__main__':  

  22.    cmd = ['cal','echo hello!']#你要执行的命令列表

  23.    username = ""  #用户名

  24.    passwd = ""    #密码

  25.    threads = []   #多线程

  26. print"Begin......"

  27. for i in range(1,254):  

  28.        ip = '192.168.1.'+str(i)  

  29.        a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))  

  30.        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用parammiko模块实现linux的远程操作)