python实现ssh登录send_Python实现ssh批量登录并执行命令
局域网内有一百多台电脑,全部都是linux操作系统,所有电脑配置相同,系统完全相同(包括用户名和密码),ip地址是自动分配的。现在有个任务
是在这些电脑上执行某些命令,者说进行某些操作,比如安装某些软件,拷贝某些文件,批量关机等。如果一台一台得手工去操作,费时又费力,如果要进行多个操
作就更麻烦啦。
或许你会想到网络同传,网络同传是什么?就是在一台电脑上把电脑装好,配置好,然后利用某些软件,如“联想网络同传”把系统原样拷贝过去,在装系统
时很有用,只要在一台电脑上装好,同传以后所有的电脑都装好操作系统了,很方便。同传要求所有电脑硬件完全相同,在联想的电脑上装的系统传到方正电脑上肯
定会出问题的。传系统也是很费时间的,根据硬盘大小,如果30G硬盘,100多台电脑大约要传2个多小时,反正比一台一台地安装快!但是如果系统都传完
了,发现忘了装一个软件,或者还需要做些小修改,再同传一次可以,但是太慢,传两次半天时间就没了。这时候我们可以利用ssh去控制每台电脑去执行某些命
令。
先让我们回忆一下ssh远程登录的过程:首先执行命令 ssh username@192.168.1.x
,第一次登录的时候系统会提示我们是否要继续连接,我们要输入“yes”,然后等一段时间后系统提示我们输入密码,正确地输入密码之后我们就能登录到远程
计算机,然后我们就能执行命令了。我们注意到这里面有两次人机交互,一次是输入‘yes’,另一次是输入密码。就是因为有两次交互我们不能简单的用某些命
令去完成我们的任务。我们可以考虑把人机交互变成自动交互,python的pexpect模块可以帮我们实现自动交互。下面这段代码是用pexpect实
现自动交互登录并执行命令的函数:
点击(此处)折叠或打开
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
def ssh_cmd(ip, passwd, cmd):
ret = -1
ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))
try:
i = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5)
if i == 0 :
ssh.sendline(passwd)
elif i == 1:
ssh.sendline('yes\n')
ssh.expect('password: ')
ssh.sendline(passwd)
ssh.sendline(cmd)
r = ssh.read()
print r
ret = 0
except pexpect.EOF:
print "EOF"
ssh.close()
ret = -1
except pexpect.TIMEOUT:
print "TIMEOUT"
ssh.close()
ret = -2
return ret
利用pexpect模块我们可以做很多事情,由于他提供了自动交互功能,因此我们可以实现ftp,telnet,ssh,scp等的自动登录,还是比较实用的。根据上面的代码相信读者已经知道怎么实现了(python就是那么简单!)。
用上面的代码去完成任务还是比较费时间的,因为程序要等待自动交互出现,另外ubuntu用ssh连接就是比较慢,要进行一系列的验证,这样才体现
出ssh的安全。我们要提高效率,在最短的时间内完成。后来我发现了python里面的paramiko模块,用这个实现ssh登录更加简单。看下面的代
码:
#-*- coding: utf-8 -*-
#!/usr/bin/python
importparamiko
importthreading
defssh2(ip,username,passwd,cmd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
formincmd:
stdin, stdout, stderr = ssh.exec_command(m)
# stdin.write("Y") #简单交互,输入 ‘Y’
out = stdout.readlines()
#屏幕输出
foroinout:
printo,
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......"
foriinrange(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服务器并让其开机自动执行。
相关文章:

传Exchange 15将于今年9月发布
Microsoft Exchange Conference (简称MEC)是微软公司所举办的有关Exchange Server软件的主题会议,但它在过去的十年间一直没有举行。今年的9月24-26日,微软将在佛罗里达州重新启动MEC并展示Exchange 15。根据ZDNet报道,…

Django进阶之session
基于cookie做用户验证时:敏感信息不适合放在cookie中 session依赖cookie session原理 cookie是保存在用户浏览器端的键值对 session是保存在服务器端的键值对 session服务端中存在的数据为: session {随机字符串1:{用户1的相关信息}随机字符…

python画美女代码_教你用python爬取网站美女图(附代码及教程)
我前几篇文章都是说一些python爬虫库的用法,还没有说怎样利用好这些知识玩一些好玩的东西。那我今天带大家玩好玩又刺激的,嘻嘻!对了,requests库和正则表达式很重要的,一定要学会!一定要学会!&a…
Python基础学习3
6 模块和包 (1) 命名以.py结尾的文件就是Python模块 Python的包就是一个文件夹,至少有还有一个__init__.py的文件 包中可以有文件夹,文件夹中可以有包 (2) 文件的导入 每使用一个变量名或者函数时,就需要导入另一个文件 例&#…

CSS伪类 选择器
一、伪类:active/*被激活的元素*/:focus/*拥有键盘输入焦点的元素*/ :hover/*鼠标悬浮在元素上方时*/ :link/*未被访问的链接*/ :visited/*已被访问的链接*/ :first-child/*元素的第一个子元素*/ :lang/*带有指定 lang 属性的元素*/ CSS执行顺序是:lvcha link :hove…

svn中的revert和update
svn中的revert和update今天有人问到revert和update的问题。刚开始还真被问住了。因为感觉revert和update都可以将本地的copy更新到以前的一个版本,会有什么不同呢?查了些资料,并做了个试验,终于发现了它们的不同。假设当前最新的版…

BOM 浏览器对象模型和DOM 文档对象模型
浏览器对象模型BOM 1. 浏览器对象模型介绍 BOM(Browser Object Model) 是指浏览器对象模型,是用于描述这种对象与对象之间层次关系的模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成,其中代表…

上交三月月赛[SJTU] 1106 sudoku
题目大意:给出一道数独题,判断该数独是否有解且有唯一解。 解题思路: 由前几题的难度得,此题的难度不会太过分,所以简单暴力就可以了,40ms用时一本满足。 简单地讲一下具体的实现,从左上开始从左…

C语言-三子棋游戏
C语言中用写头文件的方式写了一个三子棋游戏 1.测试函数text.c #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #include"chess.h"void menu() {printf("*************…

取余运算怎么算_TensorFlow2.0(2):数学运算
点击“机器学习算法与Python实战”,“置顶”公众号重磅干货,第一时间送达TensorFlow2.0(1):基本数据结构——张量1 基本运算:(、-、*、/、//、%) 基本运算中所有实例都以下面的张量a、b为例进行:import tensorflow as …

xen二进制安装
需要几台机器做集群测试,目前只有一台机器所以用xen来虚拟化几台机器出来 系统: centos5.6 安装xen yum install kernel-xen xen修改grub /boot/grub/grub.conf将default1改为default0 default0 timeout5 splashimage(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.…
python模块之json,pickle
序列化是指把内存里的数据转变成字符串,以使其能保存到硬盘上或者通过网络输送到远程。 序列化的两个模块: json:只能把python中的int/str/list/tuple/dict类型的数据,可以在不同的语言之间传递数据。Python和JavaScript数据对应关系…

关于如何在pc端使用github
http://www.bcwhy.com/thread-17636-1-1.html转载于:https://www.cnblogs.com/glgl2424/archive/2013/03/13/2956944.html
Python爬虫1-Scrapy环境的安装
一. Scrapy环境的安装 1. Scrapy各平台支持情况 除了python3在Windows下不支持外,其余(Linux,Mac)均支持 2. 安装miniconda (1)建议使用Python2,用miniconda安装scrapy (2)miniconda时Python环境管理工…

汉字笔画数据_统计学原理 数据的预处理
数据审核数据审核—原始数据(raw data)完整性审核应调查的单位或个体是否有遗漏所有的调查项目或变量是否填写齐全准确性审核数据是否真实反映实际情况,内容是否符合实际数据是否有错误,计算是否正确等数据审核—二手数据(second hand data)适用性审核弄…

SqlServer时间函数的使用例子整理
为什么80%的码农都做不了架构师?>>> 整理SqlServer2008的时间函数如下: 1.获取系统时间 select getdate(); --2012-05-06 22:26:49.950 select current_timestamp; --2012-05-06 22:26:49.950 select getutcdate(); --20…

bzoj 4710 [Jsoi2011]分特产 组合数学+容斥原理
题面 题目传送门 解法 考虑容斥原理 显然,我们可以枚举有多少个人没有收到 然后就转化成一个组合问题了 假设现在有\(x\)个物品,\(n\)个人,可以有人没有被分到,那么分给这\(n\)个人的方案数为\(nx-1\choose n-1\) 然后就是分别计算…
Python爬虫2-GET_POST与开发者工具
一. GET_POST与开发者工具 1. 浏览器的基本工作规则 浏览器请求访问服务器,服务器返回数据 (1) 请求的格式 GET:长度不能大于2k参数明文显示在地址栏,不保密,通常用在查询请求 POST:长度可以很大,参数写…

springcloud是什么_阿里P8道出,入职阿里必会199道SpringCloud面试题,你能掌握多少?...
前言Spring Cloud 自 2016 年 1 月发布第一个 Angel.SR5 版本,到目前 2020 年 3 月发布 Hoxton.SR3 版本,已经历经了 4 年时间。这 4 年时间里,Spring Cloud 一共发布了 46 个版本,支持的组件数从 5 个增加到 21 个。Spring Cloud…

不一样的命令行 – Windows PowerShell简介
引子 一直很羡慕Linux的命令提示符(当然他们叫Shell)。正则表达式,管道,各种神奇的命令,组合起来就能高效完成很多复杂的任务。效率实在是高。流了n年的哈喇子以后,终于有幸用上了Win7,邂逅了cm…

excel中会计专用格式问题_解决方法
excel 2003在使用格式中当选择会计专用会出现负号在左,数字在右的情况.这类设置并不是在excel中完成,而是在控制面板,区域和语言选项---自定义中设置---货币中设置,-¥1.1改为¥-1.1就可以解决了.包括千位分割样式保留的小数点位数等都可以在这里进行设置来…

Spring.Net Aop
Spring.Net 有四种通知: IMethodBeforeAdvice,IAfterReturningAdvice,IMethodInterceptor,IThrowsAdvice BeforeAdvice 1 using System.Reflection;2 using Spring.Aop;3 public class BeforeAdvice : IMethodBefore…

Oracle to_char函数的使用方法
本文转载于:https://blog.csdn.net/mikyz/article/details/69397030 本文转载于:https://www.cnblogs.com/aipan/p/7941917.html 本文转载于:https://blog.csdn.net/jinlong5200/article/details/3135949 转载于:https://www.cnblogs.com/demon09/p/9485627.html

python装饰器教学_Python装饰器学习(九步入门)
这是在Python学习小组上介绍的内容,现学现卖、多练习是好的学习方式。第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*-示例1: 最简单的函数,表示调用了两次def myfunc():print("myfunc() called.")myfunc()myfunc()第二…

跨平台表空间传输(linux 10g表空间跨平台迁移到window 11g)
最近公司的一个项目里的linux 系统中的oracle 10g数据库,需要把某个表空间里的所有数据都迁移到window 2003的11g里,经过我与dba的交流、测试,决定使用跨平台的表空间传输技术,目前此项任务已经完成,经过测试ÿ…

YY的GCD 莫比乌斯反演
~~~题面~~~ 题解: $ans \sum_{x 1}^{n}\sum_{y 1}^{m}\sum_{i 1}^{k}[gcd(x, y) p_{i}]$其中k为质数个数 $$ans \sum_{i 1}^{k}\sum_{x 1}^{n}\sum_{y 1}^{m}[gcd(x, y) p_{i}…

python答辩结束语_Beta答辩总结
前言队名:拖鞋旅游队项目的链接与宣传项目总结原计划实现功能预期完成程度上传照片完美实现照片信息标注在地图上对于有地理信息的照片能够较为精确的定位足迹地图可视化能够用颜色区分出到到每个省份的程度以及显示到达的地点生成旅游故事能够生成不同的故事模板&a…
在一台电脑上使用两个github账号
问题描述: 我公司有一个github账号,每天工作把代码传上去,我觉得代码写的好,我同时想上传到自己的github账号上面去,但是目前只有一台电脑,如何在一台电脑上面进行设置,使这一台电脑可以同时上传…

[唐胡璐]QTP框架 - 关键字驱动测试框架之七 - Settings管理
这里主要是存放一些框架相关的Global设置的相关项,如图所示:转载于:https://www.cnblogs.com/yongfeiuall/archive/2013/03/18/4134155.html

ASP.NET MVC以ValueProvider为核心的值提供系统: DictionaryValueProvider
NameValueCollectionValueProvider采用一个NameValueCollection作为数据源,DictionnaryValueProvider的数据源类型自然就是一个Dictionnary。NameValueCollection和Dictionnary都是一个键值对的集合,它们之间的不同之处在NameValueCollection运行元素具有…