首页 文章 精选 留言 我的

精选列表

搜索[执行机制],共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)) #############################################################################################

资源下载

更多资源
Mario

Mario

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

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

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

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册