您的位置:首页 > 运维架构 > Linux

python用parammiko模块实现linux的远程操作

2013-08-23 13:58 1086 查看
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服务器并让其开机自动执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: