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 list使用示例 list中找连续的数字
Jan 27 Python
Python编程之属性和方法实例详解
May 19 Python
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
python使用matplotlib绘制折线图教程
Feb 08 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
Python实现的文轩网爬虫完整示例
May 16 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
详解Python并发编程之从性能角度来初探并发编程
Aug 23 Python
Python any()函数的使用方法
Oct 28 Python
通过实例了解python property属性
Nov 01 Python
用python批量移动文件
Jan 14 Python
python利用后缀表达式实现计算器功能
Feb 22 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 isset()与empty()的使用区别详解
2010/08/29 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
php正则表达式使用方法整理集合
2020/01/31 PHP
理解JavaScript中的事件
2006/09/23 Javascript
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
nodejs事件的监听与触发的理解分析
2015/02/12 NodeJs
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
jQuery Validate表单验证插件实现代码
2017/06/08 jQuery
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
python 队列详解及实例代码
2016/10/18 Python
python图书管理系统
2020/04/05 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
在django模板中实现超链接配置
2019/08/21 Python
python获取依赖包和安装依赖包教程
2020/02/13 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
宝宝周岁宴答谢词
2014/01/26 职场文书
2014年度个人工作总结
2014/11/07 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
个性发展自我评价2015
2015/03/09 职场文书
庆七一主持词
2015/06/29 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android
mysql 获取时间方式
2022/03/20 MySQL