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的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
Python机器学习之SVM支持向量机
Dec 27 Python
Python多进程multiprocessing.Pool类详解
Apr 27 Python
python实现跨excel的工作表sheet之间的复制方法
May 03 Python
python实现飞机大战微信小游戏
Mar 21 Python
Python常见的pandas用法demo示例
Mar 16 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
Python : turtle色彩控制实例详解
Jan 19 Python
Django 解决model 反向引用中的related_name问题
May 19 Python
python自动打开浏览器下载zip并提取内容写入excel
Jan 04 Python
python实现网络五子棋
Apr 11 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
解决CodeIgniter伪静态失效
2014/06/09 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
浅析Python中的序列化存储的方法
2015/04/28 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
python给微信好友定时推送消息的示例
2019/02/20 Python
python框架django项目部署相关知识详解
2019/11/04 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
Html5新标签解释及用法
2012/02/17 HTML / CSS
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
市场营销毕业生自荐信范文
2014/04/01 职场文书
高中家长寄语
2014/04/02 职场文书
工作保证书范文
2014/04/29 职场文书
2016庆祝教师节新闻稿
2015/11/25 职场文书
javaScript Array api梳理
2021/03/31 Javascript
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏
OpenFeign实现远程调用
2022/08/14 Java/Android