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中MySQLdb模块用法实例
Nov 10 Python
Python第三方库的安装方法总结
Jun 06 Python
python编程之requests在网络请求中添加cookies参数方法详解
Oct 25 Python
使用numpy和PIL进行简单的图像处理方法
Jul 02 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
python画图——实现在图上标注上具体数值的方法
Jul 08 Python
python使用opencv在Windows下调用摄像头实现解析
Nov 26 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
Keras模型转成tensorflow的.pb操作
Jul 06 Python
python中的django是做什么的
Jul 31 Python
Python中使用ipython的详细教程
Jun 22 Python
python区块链持久化和命令行接口实现简版
May 25 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
global.php
2006/12/09 PHP
php 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
对比分析json及XML
2014/11/28 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
原理深度解析Vue的响应式更新比React快
2020/04/04 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
Python修改MP3文件的方法
2015/06/15 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
Python使用type动态创建类操作示例
2020/02/29 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
使用django自带的user做外键的方法
2020/11/30 Python
python xlsxwriter模块的使用
2020/12/24 Python
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
七一表彰活动方案
2014/01/18 职场文书
外贸专业求职信
2014/03/09 职场文书
办公用房租赁协议书
2014/11/29 职场文书
教师年度考核个人总结
2015/02/12 职场文书
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技