python 远程执行命令的详细代码


Posted in Python onFebruary 15, 2022

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','123456')    #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)
        # 回显很长的命令可能执行较久,通过循环分批次取回回显
            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', '123456')
    host.connect()
    host.send('ll')
    host.close()

到此这篇关于python 远程执行命令的文章就介绍到这了,更多相关python 远程执行命令内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现的文件同步服务器实例
Jun 02 Python
python之Socket网络编程详解
Sep 29 Python
Python学生信息管理系统修改版
Mar 13 Python
Windows下安装Django框架的方法简明教程
Mar 28 Python
Python(Django)项目与Apache的管理交互的方法
May 16 Python
Python 变量类型详解
Oct 10 Python
详解Python学习之安装pandas
Apr 16 Python
PyTorch的自适应池化Adaptive Pooling实例
Jan 03 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
Django多数据库联用实现方法解析
Nov 12 Python
Python中zipfile压缩包模块的使用
May 14 Python
python 详解turtle画爱心代码
python分分钟绘制精美地图海报
基于PyQT5制作一个桌面摸鱼工具
Feb 15 #Python
python接口测试返回数据为字典取值方式
Feb 12 #Python
Python socket如何解析HTTP请求内容
Feb 12 #Python
python全面解析接口返回数据
Feb 12 #Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 #Python
You might like
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
javascript document.referrer 用法
2009/04/30 Javascript
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
Python元组常见操作示例
2019/02/19 Python
Python2与Python3的区别实例分析
2019/04/11 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
岗位职责的构建方法
2014/02/01 职场文书
工会主席岗位责任制
2014/02/11 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
2015年青年教师工作总结
2015/05/25 职场文书