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 合并文件的具体实例
Aug 08 Python
python连接MySQL数据库实例分析
May 12 Python
Python实现购物车购物小程序
Apr 18 Python
解决pycharm安装后代码区不能编辑的问题
Oct 28 Python
Python队列、进程间通信、线程案例
Oct 25 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
django中的数据库迁移的实现
Mar 16 Python
Python类super()及私有属性原理解析
Jun 15 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
Python3爬虫中关于中文分词的详解
Jul 29 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 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
常用PHP框架功能对照表
2014/10/23 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
python调用opencv实现猫脸检测功能
2019/01/15 Python
一行python实现树形结构的方法
2019/08/09 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
2019/08/12 Python
python 批量将中文名转换为拼音
2021/02/07 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
韩国现代百货官网:Hmall
2018/03/21 全球购物
美国领先的眼镜和太阳镜在线零售商:Glasses.com
2019/08/26 全球购物
会计系毕业个人自荐信格式
2013/09/23 职场文书
德语专业求职信
2014/03/12 职场文书
英文请假条
2014/04/11 职场文书
防沙治沙典型材料
2014/05/07 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
就业协议书怎么填
2014/09/15 职场文书
2014年党小组工作总结
2014/12/20 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL