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自动化测试之连接几组测试包实例
Sep 28 Python
全面了解python中的类,对象,方法,属性
Sep 11 Python
Python搜索引擎实现原理和方法
Nov 27 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
10 分钟快速入门 Python3的教程
Jan 29 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
postman传递当前时间戳实例详解
Sep 14 Python
Python原始套接字编程实例解析
Jan 29 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 Python
python 爬虫之selenium可视化爬虫的实现
Dec 04 Python
python反扒机制的5种解决方法
Feb 06 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中改变图片的尺寸大小的代码
2011/07/17 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
element-ui表格数据转换的示例代码
2018/08/24 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
领导检查欢迎词
2014/01/14 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
避暑山庄导游词
2015/02/04 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
感恩老师主题班会
2015/08/12 职场文书