首页 文章 精选 留言 我的

精选列表

搜索[执行框架],共10000篇文章
优秀的个人博客,低调大师

利用paramiko模块批量登录(执行命令/上传文件)

工作中由于服务器主机很多,如果手动的一台一台去添加ssh认证,效率太低了,而此脚本正是为了解决此问题 此脚本的实现的功能: 1、实现了(密码、ssh认证)单一主机登录和批量主机登录 2、实现了(密码、ssh认证)单一主机上传文件和批量主机上传文件(下载文件的原理和此一样) 3、主机批量添加ssh认证(这才是我的主要目的) 脚本的不足: 1、只能循环主机名 2、所有的主机的账号和密码都是一样的,不够灵活 有需求的朋友可以修改下代码,可以把主机、账号密码存放在一个文件中,循环读取文件 下面贴上代码吧 如下代码有错 欢迎各位纠正 有错才有进步 你们的指点是我进步的源泉 #!/usr/bin/python #coding:utf-8 #需要安装paramiko模块 #yuminstallpython-paramiko-y importparamiko,os classSSH2: def__init__(self,hostname=None,username=None,password=None,key_file=None,port=22,timeout=30): self.h=hostname self.u=username self.p=password self.t=timeout self.port=int(port) self.key_file=key_file #使用密码登录 defssh2_pass(self,command=None): paramiko.util.log_to_file('/tmp/paramiko.log') ssh2=paramiko.SSHClient() ssh2.load_system_host_keys() ssh2.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh2.connect(hostname=self.h,username=self.u,password=self.p,port=self.port,timeout=self.t) stdin,stdout,stderr=ssh2.exec_command(command) print'{0}\t{1}'.format(self.h,command) printstdout.read() ssh2.close() #使用key密钥登录 defssh2_key(self,command=None): paramiko.util.log_to_file('/tmp/paramiko.log') key=paramiko.RSAKey.from_private_key_file(self.key_file) ssh2=paramiko.SSHClient() ssh2.load_system_host_keys() ssh2.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh2.connect(hostname=self.h,username=self.u,pkey=key,port=self.port,timeout=self.t) stdin,stdout,stderr=ssh2.exec_command(command) print'{0}\t{1}'.format(self.h,command) printstdout.read() ssh2.close() #使用密码上传文件 defsftp_pass_put(self,localpath=None,remotepath=None): t=paramiko.Transport((self.h,self.port)) t.connect(username=self.u,password=self.p) sftp=paramiko.SFTPClient.from_transport(t) sftp.put(localpath=localpath,remotepath=remotepath) printself.h,localpath t.close() #使用key密钥上传文件 defsftp_key_put(self,localpath=None,remotepath=None): key=paramiko.RSAKey.from_private_key_file(self.key_file) t=paramiko.Transport((self.h,self.port)) t.connect(username=self.u,pkey=key) sftp=paramiko.SFTPClient.from_transport(t) sftp.put(localpath=localpath,remotepath=remotepath) printself.h,localpath t.close() if__name__=='__main__': ###################使用密码登录主机############################################################# #远程服务器IP地址 #hostname='192.168.31.102' #远程服务器的账号和密码 #username='xiaomo' #password='xiaomo' #SSH=SSH2(hostname=hostname,username=username,password=password,port=22) #SSH.ssh2_pass(command='df-h') ###################使用密钥登录主机############################################################# #远程服务器IP地址 #hostname='192.168.31.102' #远程服务器的账号 #username='xiaomo' #指定密钥文件的位置 #key_file='/home/xiaomo/.ssh/id_rsa' #SSH=SSH2(hostname=hostname,username=username,key_file=key_file,port=22) #SSH.ssh2_pass(command='df-h') ###################使用密码上传文件############################################################# #远程服务器IP地址 #hostname='192.168.31.102' #远程服务器的账号和密码 #username='xiaomo' #password='xiaomo' #本地文件绝对路径 #密钥需要自己ssh-keygen生成 #local='/home/xiaomo/.ssh/id_rsa.pub' #远程服务器文件绝对路径 #remote='/tmp/id_rsa.pub' #SSH=SSH2(hostname=hostname,username=username,password=password,port=22) #SSH.sftp_pass_put(localpath=local,remotepath=remote) #SSH.ssh2_pass(command='ls-l{0}'.format(remote)) ###################使用密钥上传文件############################################################# #远程服务器IP地址 #hostname='192.168.31.102' #远程服务器的账号 #username='xiaomo' #指定密钥文件的位置 #key_file='/home/xiaomo/.ssh/id_rsa' #本地文件绝对路径 #local='/home/xiaomo/.ssh/id_rsa.pub' #远程服务器文件绝对路径 #remote='/tmp/id_rsa.pub' #SSH=SSH2(hostname=hostname,username=username,port=22,key_file=key_file) #SSH.sftp_key_put(localpath=local,remotepath=remote) #SSH.ssh2_key(command='ls-l{0}'.format(remote)) #####################使用密码批量添加用户认证############################################################ #hostname=['192.168.31.101','192.168.31.102','192.168.31.103'] #远程服务器的账号和密码 #username='xiaomo' #password='xiaomo' #本地文件绝对路径 #local='/home/xiaomo/.ssh/id_rsa.pub' #远程服务器文件绝对路径 #remote='/tmp/id_rsa.pub' #批量上传密钥文件并添加认证 #如果.ssh目录或authorized_keys文件事先存在,请确认权限是否正确 #forhinhostname: #SSH=SSH2(hostname=h,username=username,password=password,port=22,timeout=30) ##/home/xiaomo/.ssh/是远程服务器的用户目录 #SSH.ssh2_pass(command='(umask077;test-d/home/xiaomo/.ssh||mkdir/home/xiaomo/.ssh)') #SSH.sftp_pass_put(localpath=local,remotepath=remote) #SSH.ssh2_pass(command='(umask077;cat{0}>>/home/xiaomo/.ssh/authorized_keys&&rm-f{0})'.format(remote)) #SSH.ssh2_pass(command='cat/home/xiaomo/.ssh/authorized_keys') ##################使用密钥批量上传文件################################################################### #hostname=['192.168.31.101','192.168.31.102','192.168.31.103'] #远程服务器的账号 #username='xiaomo' #指定密钥文件的位置 #key_file='/home/xiaomo/.ssh/id_rsa' #本地文件绝对路径 #local='/home/xiaomo/.ssh/id_rsa.pub' #远程服务器文件绝对路径 #remote='/tmp/id_rsa.pub' #forhinhostname: #SSH=SSH2(hostname=h,username=username,port=22,key_file=key_file) #SSH.sftp_key_put(localpath=local,remotepath=remote) #SSH.ssh2_key(command='ls-l{0}'.format(remote)) #############################################################################################

优秀的个人博客,低调大师

【框架】121:spring框架之IOC容器

今天是刘小爱自学Java的第121天。 感谢你的观看,谢谢你。 在spring核心配置文件中,有一个bean标签,我们以前创建一个对象都是直接new。 而在spring中可以将对象交给spring管理,再通过spring工厂直接获取。 所以我们也称之为spring容器。 今天的学习内容就是关于bean标签: Bean的作用域:单例与多例说明。 Bean属性依赖注入的两种方式,以及p名称空间、seEL表达式的引入。 补充说明一个IDEA插件。 一、bean的作用域 作用域也就是指:由spring创建的bean对象在什么情况下有效?主要有单例和多例两种。 在spring核心配置文件中可以配置对象是单例还是多例,通过scope属性设定: 值为singleton即为单例,默认值,可省略。 值为prototype即为多例。 1单例测试 多次获取单例对象,并打印输出。 我们会发现:如果是单例的话,构造方法只运行一次,多次获取的是同一个对象。 在spring IOC容器中仅存在一个bean实例,bean以单例方式存在。 注意:这边我大致提下,昨天忘记说明了,通过spring工厂获取对象时,参数可以是id,也可以是bean的类型,也就是对应接口/类的Class对象。 使用id获取最稳妥,如果根据类型获取,配置了多个类型的话,会抛出异常。 2多例测试 多次获取单例对象,并打印输出。 我们会发现:多例构造方法会运行多次,多次获取的都是不同的对象。 每次从容器中调用bean时,都会返回一个新的实例,即每次调用getBean()的时候,相当于new了一次bean对象。 二、bean属性的依赖注入 什么是Bean属性的依赖注入? 就可以理解成对一个对象的属性赋值,这个我们昨天就接触过,其有两种注入方式: 1构造器参数注入 constructor-arg ①创建Car类,定义构造方法 既然是通过构造器参数注入,那肯定需要有参构造方法,其中为了方便测试时观看,还在该类中重写一个toString方法。 ②spring配置构造器参数 constructor-arg:该标签相当于在告诉spring容器,要调用有参构造方法了,不再调用默认的构造方法了。 所以必须要有有参构造方法,不然会报错。 index:根据索引定位属性,0表示首位。 name:根据属性参数名称定位属性。 type:根据属性数据类型定位属性。 value:简单的值,字符串。 ref:复杂的值,就是通过该属性可以引用由spring容器创建的其它bean对象。 一般都是使用name属性赋值,这样最合理,也一目了然,name和type这两种都不靠谱。 配置完成,做一个测试 根据运行结果我们能发现,通过spring的配置,可以给对象初始化赋值。 也就相当于new Car(1,"长安",20000)。 通过spring就不需要我们自己new了。 2setXXX方法属性注入 和上述构造器参数注入的效果是差不多的,只不过setXXX方法更具有选择性。 构造器参数注入有几个参数都得设置,少一个都不行,而该方法想设置哪个就设置哪个。 ①创建Person类,定义setXXX方法 使用Lombok插件可以快速创建一个Javabean,这个插件文章最后有说明。 ②spring配置setXXX方法参数 property标签:spring中专门进行setXXX属性注入的标签 。 name:setXXX方法的属性名字,例如setXXX()那么name的属性值为XXX。 value:简单的值。 ref:复杂的值,引用由spring容器创建的其它bean对象的名字。 配置完成,做一个测试 根据运行结果我们能发现,通过spring的setXXX方法属性注入,也可以给对象赋值。 该方法也就相当于通过对象调用方法setId(1),setName(“刘小爱”)… 三、p名称空间和spEL表达式 为简化XML文件的配置,Spring2.5版本开始引入了一个新的p名称空间。 准确地说,它的作用是为了简化setXXX方法属性依赖注入配置的,使用方式如下图: 在配置文件表头,引入p名称空间。 可以将property标签直接作为属性使用。 如果是引用简单对象,直接用属性名说明即可,比如p:id,p:name。 如果是引用复杂对象,需要用ref来补充说明,比如p:car-ref。 通过上图,我们能发现p名称空间能进一步地简化了代码的编写。 2spEL表达式 spEL全称Spring Expression Language,一种表达式语言,和前面学的EL表达式很像。 语法:#{…} ,通过该表达式可以引用属性、另一个Bean、甚至运算,方法都可以。 spEL表达式的使用功能比较多,Bean操作相关的通常有: #{bean的Id} 引用Bean,比如#{car}。 #{bean的Id.属性} 引用Bean的属性,比如#{person1.name}。 #{bean的Id.方法(参数)} 调用Bean的方法 附:补充一个Lombok插件 在idea开发工具中,选择File-settings,找到Plugins,在搜索框中搜索lombok。 如果以前没使用过该插件,右侧下载即可。 插件下载好后,还需要导入依赖才能使用。 在maven网站中找到lombok,随便选择一个版本,将依赖复制到我们项目对应的pom文件中即可。 依赖导入完毕,就可以使用该插件了。 它有什么用呢? 我们以前创建一个标准的JavaBean,有构造方法,有getset方法,有toString方法,一下子要写很多方法。 但是现在有了lombok插件后,只需要在类上加一个注释@Data,这些方法就都不用写了。 最后 谢谢你的观看。 如果可以的话,麻烦帮忙点个赞,谢谢你。 本文分享自微信公众号 - 刘小爱(liuxiaoai946)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册