可通过远程Linux主机配置文件信息连接到远程主机自动操作各种服务#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/9/11 16:44
# @Author  : qhh
# @Site    :
# @File    : pyshell.py
# @Software: PyCharm
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# 查阅https://blog.csdn.net/qq_32502511/article/details/79849826
import paramiko
import configparser
import re
import time# 获取配置文件数据def get_cfg_data(cfg_path):cf = configparser.ConfigParser()cf.read(cfg_path, encoding='utf-8')# 获取所有section,返回值为listsecs = cf.sections()print('可输入信息列表%s' % secs)# # 获取db中的所有属性名# dboption = cf.options('db')# print(dboption)## 获取db中的键值对input_comm = input("输入ip地址的最后一个(例如配置文件中的为[host_169]则需要输入169或者核对可输入信息列表查看下划线_后的数值是否存在):")if 'host_'+input_comm not in secs:print('输入的信息有误系统自动退出!请检查host.ini配置文件中的中括号[]内是否包含了所输入的%s' % input_comm)exit(0)dbitem = cf.items('host_'+input_comm)print(dict(dbitem))# 获取section为db,属性名为db_pass的值# input_comm = input("输入ip地址的最后一个(例如配置文件中的为[host_169]则需要输入169):")# li = []# print(cf.get('host_'+input_comm, 'host_ip'))# print(cf.get('host_'+input_comm, 'host_user'))# print(cf.get('host_'+input_comm, 'host_pw'))# li.append(cf.get('host_'+input_comm, 'host_ip'))# li.append(cf.get('host_'+input_comm, 'host_user'))# li.append(cf.get('host_'+input_comm, 'host_pw'))return dict(dbitem)# 定义一个类,表示一台远端linux主机
class Linux(object):# 通过IP, 用户名,密码,超时时间初始化一个远程Linux主机def __init__(self, ip, username, password, timeout=30):self.ip = ipself.username = usernameself.password = passwordself.timeout = timeout# transport和chanelself.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)# 接收到的网络数据解码为strprint(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 -= 1else:print(u'重试3次失败,结束程序')exit(1)# 断开连接def close(self):self.chan.close()self.t.close()# 发送要执行的命令def send(self, cmd):cmd += '\r'# 通过命令执行提示符来判断命令是否执行完成p = re.compile('root@scdel-02:.*?#')result = ''# 发送要执行的命令self.chan.send(cmd)# 回显很长的命令可能执行较久,通过循环分批次取回回显,执行成功返回true,失败返回falsewhile True:time.sleep(0.5)ret = self.chan.recv(65535)ret = ret.decode('utf-8')result += retreturn result# 连接正常的情况
if __name__ == '__main__':# 获取配置文件中的数据cfg_data = get_cfg_data('host.ini')host = Linux(cfg_data['host_ip'], cfg_data['host_user'], cfg_data['host_pw'])  # 传入Ip,用户名,密码host.connect()while True:# result = host.send('ifconfig')  # 发送一个查看ip的命令# host.send('ifconfig')host.send("alias ls='ls --color=never'")host.send("alias ll='ls -l --color=never'")# 遍历命令列表for key, value in cfg_data.items():print(key, value)if 'comm' in key:result = host.send(value)# print("返回的结果--")# print(result)input_com = input("输入命令:")result = host.send(input_com)print("返回的结果--")print(result)host.close()

python3操作linux窗口相关推荐

  1. python3操作mysql教程_python3操作mysql教程

    一.下载\安装\配置 1. python3 当前最新版本是python3.2,下载地址是 http://www.python.org/ftp/python/3.2.3/python-3.2.3.msi ...

  2. Python3操作MongoDB数据库

    Python3操作MongoDB数据库 文章目录 Python3操作MongoDB数据库 0. 写在前面 1. 安装开源驱动库pymongo 2. 参考 0. 写在前面 Linux:Ubuntu Ky ...

  3. Python 远程操作 Linux

    使用Python 远程管理 Linux 系统 Linux 系统的 远程操作 Linux 连接 Linux 与 Windows 文件 传输 一. Windows to Linux: 二. Linux c ...

  4. linux窗口切换快捷键_分配快捷键以在Linux上激活打开的应用程序窗口

    linux窗口切换快捷键 We've already shown you how to customize shortcut keys in any Linux application, but fo ...

  5. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息...

    1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...

  6. MATLAB基础操作--命令窗口

    MATLAB基础操作–命令窗口 常用的赋值运算符-'='对变量进行赋值 x=9-5 x = 4 x-8=9 x-8=9 ↑ 错误: '=' 运算符的使用不正确.要为变量赋值,请使用 '='.要比较值是 ...

  7. python窗口程序-python操作Windows窗口程序

    如果你想看更多舒适的布局和守时,有干货推动现场每天8点.定期获得数据接口和数据写入Excel表.Excel需要使用其他程序和需要打开.Pywin32处理是一个32位整数,用于标记对象在windows中 ...

  8. 在Windows上使用终端模拟程序连接操作Linux以及上传下载文件

    在Windows上使用终端模拟程序连接操作Linux以及上传下载文件 [很简单,就是一个工具的使用而已,放这里是做个笔记.] 刚买的云主机,或者是虚拟机里安装的Linux系统,可能会涉及到在windo ...

  9. linux的python2.7的paramiko_Python使用paramiko操作linux的方法讲解

    paramiko介绍 paramiko是一个基于python编写的.使用ssh协议的模块,跟xshell和xftp功能类似,支持加密与认证,可以上传下载和访问服务器的文件. 可以利用paramiko模 ...

最新文章

  1. GLM+广义线性模型
  2. “全能”选手—Django 1.10文档中文版Part2
  3. 同步异步单线程多线程初级理解
  4. 23、java中的网编基础
  5. linux(2):linux命令查看开放哪些端口
  6. idea2020.03 lombok异常
  7. 做企业网站为什么要服务器呢,企业为什么要建站?
  8. 像个字段相减绝对值_遇见你丨像个英雄一样活着 瘫痪作家用手指敲击文字著百万字文学作品...
  9. 10篇产品大V精华文章,你值得一读
  10. 新手记录SPSS学习笔记1
  11. Python实现电影抢票系统需要几行代码?猜对有奖
  12. 三维旋转矩阵_三维重建中的旋转(Rotation)
  13. 手机app支付宝支付和苹果支付分析
  14. 原生JS实现在线音乐播放器及歌词滚动
  15. 爬虫 -- 王者荣耀爬虫,爬取每个英雄的皮肤图片
  16. SSE Intrinsics各函数介绍
  17. LaTex: 多种方法实现图片复杂排列
  18. Could not load dynamic library ‘libcusolver.so.11‘; dlerror: libcusolver.so.11: cannot open shared o
  19. MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)
  20. Prometheus 环境搭建

热门文章

  1. [凯立德]2014全分辨率C-Car 4.0机车C2610版完美懒人包
  2. Cisco IPPhone XML 技术文档
  3. 开启游戏加速,提高游戏速度
  4. python requests 高级用法
  5. 关于用户体验和商业模式闭环的思考
  6. 容斥原理amp;lcm(2.22)As Firm As Stone
  7. 优课联盟 实境英语 Test for Unit 8
  8. open3d学习笔记四【表面重建】
  9. 特里·杜吉分享的EDM营销经验
  10. android语音识别之科大讯飞语音API的使用