Python实现堡垒机模式下远程命令执行操作示例


Posted in Python onMay 09, 2019

本文实例讲述了Python实现堡垒机模式下远程命令执行操作。分享给大家供大家参考,具体如下:

一 点睛

堡垒机环境在一定程度上提升了运营安全级别,但同时也提高了日常运营成本,作为管理的中转设备,任何针对业务服务器的管理请求都会经过此节点,比如SSH协议,首先运维人员在办公电脑通过SSH协议登录堡垒机,再通过堡垒机SSH跳转到所有的业务服务器进行维护操作。

Python实现堡垒机模式下远程命令执行操作示例

我们可以利用paramiko的invoke_shell机制来实现通过堡垒机实现服务器操作,原理是SSHClient.connect到堡垒机后开启一个新的SSH会话 (session),通过新的会话运行“ssh user@IP”去实现远程执行命令的操作。

二 代码

#coding=utf-8
#!/usr/bin/env python
import paramiko
import os,sys,time
hostname="192.168.0.120"      # 定义业务服务器
username="root"
password="123456"
blip="192.168.0.101"        # 定义业务堡垒机
bluser="root"
blpasswd="123456"
port=22
passinfo='\'s password: '      # 输入服务器密码的前标志串
paramiko.util.log_to_file('syslogin.log')
ssh=paramiko.SSHClient()      # ssh登录堡垒机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=blip,username=bluser,password=blpasswd)
#new session
channel=ssh.invoke_shell()     # 创建会话,开启命令调用
channel.settimeout(10)       # 会话命令执行超时时间,单位为秒
buff = ''
resp = ''
channel.send('ssh '+username+'@'+hostname+'\n')    # 执行ssh登录业务主机
while not buff.endswith(passinfo):           # ssh登录的提示信息判断,输出串尾含有"\'s password:"时退出while循环
  try:
    resp = channel.recv(9999)
  except Exception,e:
    print 'Error info:%s connection time.' % (str(e))
    channel.close()
    ssh.close()
    sys.exit()
  buff += resp
  if not buff.find('yes/no')==-1:          # 输出串尾含有"yes/no"时发送"yes"并回车
    channel.send('yes\n')
print(buff)
print("*************************************************************************************")
channel.send(password+'\n')              # 发送业务主机密码
buff=''
while not buff.endswith('# '):             # 输出串尾为"# "时说明校验通过并退出while循环
  resp = channel.recv(9999)
  if not resp.find(passinfo)==-1:          # 输出串尾含有"\'s password: "时说明 密码不正确,要求重新输入
    print 'Error info: Authentication failed.'
    channel.close()                # 关闭连接对象后退出
    ssh.close()
    sys.exit()
  buff += resp
channel.send('ifconfig\n')               # 认证通过后发送ifconfig命令来查看结果
buff=''
try:
  while buff.find('# ')==-1:
    resp = channel.recv(9999)
    buff += resp
except Exception, e:
  print "error info:"+str(e)
print buff                       # 打印输出串
channel.close()
ssh.close()

三 输出结果

E:\Python\python_auto_maintain\venv\Scripts\python.exe E:/Python/python_auto_maintain/6_3_2.py
Last login: Thu Feb 28 22:00:07 2019 from 192.168.0.106
hello cakin24!
ssh root@192.168.0.120
[root@slave2 ~]# ssh root@192.168.0.120
root@192.168.0.120's password:
*************************************************************************************
ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.120  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::a00:27ff:fe0a:6e8a  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:0a:6e:8a  txqueuelen 1000  (Ethernet)
        RX packets 2046  bytes 179711 (175.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1408  bytes 148744 (145.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 404117  bytes 68752333 (65.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 404117  bytes 68752333 (65.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
qbr07d54630-64: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        ether 42:76:47:57:b2:75  txqueuelen 1000  (Ethernet)
        RX packets 11  bytes 572 (572.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
qvb07d54630-64: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1450
        inet6 fe80::4076:47ff:fe57:b275  prefixlen 64  scopeid 0x20<link>
        ether 42:76:47:57:b2:75  txqueuelen 1000  (Ethernet)
        RX packets 12  bytes 816 (816.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 648 (648.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
qvo07d54630-64: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1450
        inet6 fe80::dcbe:efff:feb7:5d52  prefixlen 64  scopeid 0x20<link>
        ether de:be:ef:b7:5d:52  txqueuelen 1000  (Ethernet)
        RX packets 8  bytes 648 (648.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12  bytes 816 (816.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@localhost ~]#

更多关于Python相关内容可查看本站专题:《Python字符串操作技巧汇总》、《Python常用遍历技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python如何通过protobuf实现rpc
Mar 06 Python
Windows和Linux下Python输出彩色文字的方法教程
May 02 Python
python创建列表和向列表添加元素的实现方法
Dec 25 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
python Tcp协议发送和接收信息的例子
Jul 22 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
Nov 15 Python
python实现局域网内实时通信代码
Dec 22 Python
Python 定义只读属性的实现方式
Mar 05 Python
python怎么自定义捕获错误
Jun 29 Python
python装饰器三种装饰模式的简单分析
Sep 04 Python
Python自然语言处理之切分算法详解
Apr 25 Python
python装饰器代码解析
Mar 23 Python
python3.6使用tkinter实现弹跳小球游戏
May 09 #Python
使用GitHub和Python实现持续部署的方法
May 09 #Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 #Python
Python Excel处理库openpyxl使用详解
May 09 #Python
python3实现小球转动抽奖小游戏
Apr 15 #Python
Django保护敏感信息的方法示例
May 09 #Python
Python基于scipy实现信号滤波功能
May 08 #Python
You might like
利用PHP创建动态图像
2006/10/09 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
详解python 注释、变量、类型
2018/08/10 Python
Python补齐字符串长度的实例
2018/11/15 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
印度在线杂货店:bigbasket
2018/08/23 全球购物
同学会邀请书大全
2014/01/12 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
新年团拜会主持词
2014/04/02 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
毕业生实习证明
2014/09/19 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
win10下go mod配置方式
2021/04/25 Golang
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers