python 远程执行命令
1.简单版
- # coding: utf-8
- import paramiko
- import re
- from time import sleep
- def ssh():
- ssh = paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #指定当对方主机没有本机公钥的情况时应该怎么办,AutoAddPolicy表示自动在对方主机保存下本机的秘钥
- ssh.connect('172.16.1.5',22,'linyouyi','') #SSH端口默认22,可改
- stdin,stdout,stderr = ssh.exec_command("df -hl") #这三个得到的都是类文件对象
- outmsg,errmsg = stdout.read(),stderr.read() #读一次之后,stdout和stderr里就没有内容了,所以一定要用变量把它们带的信息给保存下来,否则read一次之后就没有了
- #outmsg = str(outmsg)
- #print(outmsg.replace("\\n","\\r\\n"))
- print(outmsg.decode())
- print(errmsg)
- if errmsg == "":
- print(outmsg)
- ssh.close()
- if __name__ == '__main__':
- ssh()
2.封装版
- # coding: utf-8
- import paramiko
- import re
- from time import sleep
- # 定义一个类,表示一台远端linux主机
- class Linux(object):
- # 通过IP, 用户名,密码,超时时间初始化一个远程Linux主机
- def __init__(self, ip, username, password, timeout=30):
- self.ip = ip
- self.username = username
- self.password = password
- self.timeout = timeout
- # transport和chanel
- self.t = ''
- self.chan = ''
- # 链接失败的重试次数
- self.try_times = 3
- # 调用该方法连接远程主机
- def connect(self):
- while True:
- # 连接过程中可能会抛出异常,比如网络不通、链接超时
- try:
- self.t = paramiko.Transport(sock=(self.ip, 22))
- self.t.connect(username=self.username, password=self.password)
- self.chan = self.t.open_session()
- self.chan.settimeout(self.timeout)
- self.chan.get_pty()
- self.chan.invoke_shell()
- # 如果没有抛出异常说明连接成功,直接返回
- print(u'连接%s成功' % self.ip)
- # 接收到的网络数据解码为str
- print(self.chan.recv(65535).decode('utf-8'))
- return
- # 这里不对可能的异常如socket.error, socket.timeout细化,直接一网打尽
- except Exception as e1:
- if self.try_times != 0:
- print(u'连接%s失败,进行重试' %self.ip)
- self.try_times -= 1
- else:
- print(u'重试3次失败,结束程序')
- exit(1)
- # 断开连接
- def close(self):
- self.chan.close()
- self.t.close()
- # 发送要执行的命令
- def send(self, cmd):
- cmd += '\r'
- # 通过命令执行提示符来判断命令是否执行完成
- p = re.compile(r']$')
- result = ''
- # 发送要执行的命令
- self.chan.send(cmd)
- # 回显很长的命令可能执行较久,通过循环分批次取回回显
- while True:
- sleep(2)
- ret = self.chan.recv(65535)
- ret = ret.decode('utf-8')
- result += ret
- if p.search(ret):
- print(result)
- return(result)
- if __name__ == '__main__':
- host = Linux('172.16.1.5', 'linyouyi', '')
- host.connect()
- host.send('ll')
- host.close()
python 远程执行命令的更多相关文章
- python 远程执行命令、上传、下载举例
使用python中的 paramiko 实现远程操作,需要安装 paramiko 模块. # vi pssh.py #!/usr/bin/python #coding=utf-8 ''' Create ...
- python 远程执行命令、发布文件
最近有个需求,想获取部分服务器上运行了那些应用服务,一台台去看,太费劲了,参考牛人写了此脚本,后期再加上一个前端页面做一些简单的运维维护的工作,凑合着先用着,待完善, 注:此脚本依懒于安装fabric ...
- python远程执行命令
def run(): try: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ...
- python之实现批量远程执行命令(堡垒机)
python远程批量执行 我并不是一个专业的开发,我一直在学习linux运维,对于python也是接触不久,所以代码写的并不是很规范简洁. 前段时间一个同学找我一起做一个自动化运维平台,我对pytho ...
- Python之路 - Socket实现远程执行命令
Python之路 - Socket实现远程执行命令 os模块实现
- 【Python】模块学习之使用paramiko连接Linux,远程执行命令,上传下载、文件
本文主要介绍paramiko远程执行linux命令,及在服务器上进行文件的上传.下载 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. ...
- Python Paramiko实现sftp文件上传下载以及远程执行命令
一.简介 Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令.文件传输等功能. 安装模块 默认Python没有自带,需要手动安装: pip3 install par ...
- python 网络编程(远程执行命令与粘包)
远程执行命令 先来学习一个新模块 , 一会用到的.. 新模块: subprocess 执行系统命令 r = subprocess.Popen('ls',shell=True,stdout=subpro ...
- 使用paramiko远程执行命令、下发文件
写部署脚本时,难免涉及到一些远程执行命令或者传输文件. 之前一直使用sh库,调用sh.ssh远程执行一些命令,sh.scp传输文件,但是实际使用中还是比较麻烦的,光是模拟用户登陆这一点,还需要单独定义 ...
随机推荐
- pip配置阿里云源
Windows:打开计算机,在地址栏输入%appdata%,回车,进入用户文件夹,新建文件夹,命名为pip 在pip下新建pip.ini,输入以下内容 [global] timeout=6000ind ...
- robotframework+python3+selenium之web相关关键字---第二集
1.F5可查看所有关键字,如图: 2.浏览器相关关键字: 2.1 Open Browser https://www.baidu.com chrome # 打开浏览器,rf默认使用火狐浏 ...
- JavaWeb开发之二《JSP + Tomcat的第一个程序“Hello World”》
搬以前写的博客[2014-12-10 22:41] 前一篇博客讲了Tomcat环境搭建,于是开始第一个“Hello JSP”程序. 服务器环境搭建好之后,我们开始写自己的网站,这里简单的写一个没有后台 ...
- 上传图片,预览并保存成blob类型 和 base64
场景: 获取到一个file类型的图片,如果直接在html中预览?这里就是利用html5的新特性,将图片转换为Base64的形式显示出来.有两种方法: 方法一:利用URL.createObjectURL ...
- 【LeetCode 4】寻找两个有序数组的中位数
题目链接 [题解] 假设在两个有序的序列中找第k小的数字. 那么我们先定位第一个序列中的第k/2个数字(不足则取最边上的那个数字)记下标为i1 然后定位第二个序列中的第k/2个数字(同样不足则取最边上 ...
- Android中ViewPgae中的Fragment如何确认当前页面可见的问题
由于在ViewPage中PageAdapter来管理所有的Fragment.在加载一个Fragment的时候,会自动缓存左右几个(默认是一个)页面,此时也会调用到正常的生命周期函数,onCreate, ...
- kubernetes(k8s)集群安全机制RBAC
1.基本概念 RBAC(Role-Based Access Control,基于角色的访问控制)在k8s v1.5中引入,在v1.6版本时升级为Beta版本,并成为kubeadm安装方式下的默认选项, ...
- Chrome 调试跨域问题解决方案之插件篇
跨域,就是A域名下的js,想请求B域名下的接口数据.跨域,只存在于浏览器端.App和小程序不存在跨域问题.跨域,分浏览器策略和服务器策略. 如果服务器配置了允许跨域,那就没有跨域问题 如果uni-ap ...
- WebBug靶场基础篇 — 02
本篇以第一人称记录这个关卡的第 1-5 关. 由于我记录的过程有点偏向于思考,所以截图截的多 = =!所以文章有点长... 下午一觉醒来,已经 4 点多了,然后开电脑,在虚拟机里,铺了铺靶场,但是毕竟 ...
- 第一个脚本 "Hello World!"
打开记事本就可以编辑脚本,REM就相当于注释,和脚本语言一样 REM Hello World GUI r DELAY STRING notepad ENTER DELAY STRING Hello W ...