python实现一个堡垒机!!!

项目背景:

有些时候,我们不想用户直接连接我们的服务器,所以我们会在中间设置一个堡垒!!!这也是堡垒机最本质的用途!,今天,我们自己写一个,用python!

实验环境:

vmware workstation 11

服务器A:ip:192.168.0.19   关闭iptables  setenforce0

服务器B:ip:192.168.0.25   关闭iptables  setenforce0

服务器C:ip:192.168.0.13    关闭 iptables  setenforce0

paramiko模块

SecureCRT (ssh远程连接软件)

实验过程:

一、首相在服务器A上安装paramiko模块

#easy_install paramiko

直接就能安装上去,然后我们就可以使用了。

二、堡垒机程序创建:

[[email protected]  ~]# cat Fortress_machine.py

#!/usr/bin/env python

import paramiko

import os,sys,time

print "This is fuchao1 Fortress_machine!!!"

blip =raw_input("please input baolei ip:")

bluser =raw_input("please input baolei username:")

blpasswd=raw_input("please input baolei password:")

hostname = raw_input("please input fuwuqi ip:")

username = raw_input("please input fuwuqi username:")

password = raw_input("please input fuwuqi password:")

port =raw_input("please input connect port:")

passinfo = ‘\‘s password: ‘

paramiko.util.log_to_file(‘syslogin.log‘)

ssh=paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname=blip,username=bluser,password=blpasswd)

channel=ssh.invoke_shell()

channel.settimeout(10)

buff =‘‘

resp =‘‘

channel.send(‘ssh ‘+username+‘@‘+hostname+‘\n‘)

while not buff.endswith(passinfo):

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:

channel.send(‘yes\n‘)

buff=‘‘

channel.send(password+‘\n‘)

buff=‘‘

while not buff.endswith(‘# ‘):

resp =channel.recv(9999)

if not resp.find(passinfo)==-1:

print ‘Error info: Authentication failed.‘

channel.close()

ssh.close()

sys.exit()

buff+=resp

channel.send(‘ifconfig\n‘)

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()

三、堡垒机测试:

[[email protected]  ~]# python Fortress_machine.py

This is fuchao1 Fortress_machine!!!

please input baolei ip:192.168.0.25

please input baolei username:root

please input baolei password:123456

please input fuwuqi ip:192.168.0.13

please input fuwuqi username:root

please input fuwuqi password:123456

please input connect port:22

ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:86:D2:12

inet addr:192.168.0.13  Bcast:192.168.0.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe86:d212/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:268557 errors:0 dropped:0 overruns:0 frame:0

TX packets:48707 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:44749401 (42.6 MiB)  TX bytes:3234483 (3.0 MiB)

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING  MTU:65536  Metric:1

RX packets:12 errors:0 dropped:0 overruns:0 frame:0

TX packets:12 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:688 (688.0 b)  TX bytes:688 (688.0 b)

可以看到 我通过堡垒机192.168.0.25,连接到受保护的服务器192.168.0.13上面了,当然你可以自定义堡垒机ip和用户,受保护服务器ip和用户,还有连接的端口。简直太棒了!而且你可以自定义想要执行的命令!!!

谢谢大家,希望大家能得到学习,知识在于分享!!!

时间: 03-14

python实现一个堡垒机!!!的相关文章

冰冻三尺非一日之寒-来一个堡垒机

第十三章   堡垒机 1.堡垒机的概念 2.堡垒机的实现 概念: 背景,公司为了主机系统的管理和安全,更有效的工作,产生的一种工作模式,往往一个公司有很多台服务器,这些服务器又有许多人需要去操作,运维.开发.测试等.人多 手杂,谁操作了什么,导致了什么问题,用户的管理.主机的管理,都需要高效的实现,堡垒机实现了这些管理上的方便. 直接说事,堡垒机是建立在工作

麒麟开源堡垒机集中管控平台软件简介

大型企业往往分为集团中心.省中心及地市公司等多级部门,很多大型企业都已经安装了堡垒机,堡垒机往往以省中心.为单位进行管理,而很多省公司往往也因为业务需要采购了很多台堡垒机,这样的方式造成如下问题: 1. 运维人员不得不记录多台堡垒机的IP.多台堡垒机的用户名和口令,特别是当几台堡垒机之间的密码策略不统一的时候,非常容易造成密码混乱问题: 2. 缺少集中统一的管理系统,各台堡垒机很难做到安全策略.帐号策略.备份策略等统一一致,容易造成管理混乱: 3. 审计员审计时,不得不分别登录到所有的堡垒机上,

开源堡垒机安装测试上线部署详解-----麒麟开源堡垒机

近期出于管理和检查需要,单位领导要求上堡垒机系统,测试了几个商业堡垒机,因为价格超过预算等原因都未购买,又测试了三个开源的堡垒机,感觉麒麟开源堡垒机功能最全,基本上和商业堡垒机一样,唯一的问题就是图形部分不开源,但因为我们的服务器基本上全是LINUX环境,telnet.ssh.ftp.sftp已经足够了因此将这套堡垒机已经用于生产环境. 现在市场商业堡垒机价格太高,基本上都要到10万左右,我结合在公司部署开源堡垒机的经验,将过程写为文档与大家分享. 我测试的其它开源堡垒机基本上还是半成品,麒麟堡

堡垒机-麒麟堡垒机安装过程

1.1 系统安装 1. 安装条件,系统必须至少有二块网卡,系统硬件为:Intel 64位CPU.4G内存(虚机与实体机都可以) 2. 插入光驱进行启动, 到了开机界面直接在install blj处按回车即可以进行安装系统会自动完成安装. 如果使用笔记本进行虚机安装,先选择install Pcvm,方式使用500M SWAP, 默认安装方式使用32G SWAP,这几个安装方式主要就是SWAP大小不同,如果使用虚机方式安装堡垒机,有可能出现SWAP不够用问题. 3. 安装过后,系统默认IP为: Et

Python之路【第八篇】:堡垒机实例以及数据库操作

Python之路[第八篇]:堡垒机实例以及数据库操作 堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + import paramiko transport = paramiko.Transport(('hostname', 22)) transport.connect(username='wupeiqi', password='123') ssh

Python之路【第九篇】堡垒机基础&数据库操作

复习paramiko模块 Python的paramiko模块,是基于SSH用于连接远程服务器并执行相关操作. SSHClient #!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'luo_t' import paramiko ''' 第一种方法 ''' ssh = paramiko.SSHClient() #创建SSH对象 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy

python之实现批量远程执行命令(堡垒机)

python远程批量执行 我并不是一个专业的开发,我一直在学习linux运维,对于python也是接触不久,所以代码写的并不是很规范简洁. 前段时间一个同学找我一起做一个自动化运维平台,我对python的django还没有了解,并且对于HTML和JS这类开发学习还没有涉及,所以我说我做些后台的实现,前端就交给我的同学做.不扯淡了,下面说下我做批量执行的思路. 用到的模块:paramiko 功能:很简单就是批量执行命令,类似于ansible,本来想用Fabric,但是想一想还是用paramiko,

python之实现基于paramiko和mysql数据库的堡垒机

一.堡垒机结构 堡垒机执行流程: 管理员为用户在服务器上创建账号(将公钥放置服务器,或者使用用户名密码) 用户登陆堡垒机,输入堡垒机用户名密码,现实当前用户管理的服务器列表 用户选择服务器,并自动登陆 执行操作并同时将用户操作记录 注:配置.brashrc实现ssh登陆后自动执行脚本,如:/usr/bin/python /home/wupeiqi/menu.py 二.实现过程 步骤一,实现用户登陆 import getpass user = raw_input('username:') pwd

Python之路:堡垒机实例以及数据库操作

Python之路:堡垒机实例以及数据库操作 一.堡垒机前戏 开发堡垒机之前,先学习Python的paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作. SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: #!/usr/bin/env  python# --*--coding:utf-8 --*--import paramiko #创建SSH对象ssh = paramiko.SSHClient()# 允许连接不在know_hosts文件中的主机ssh.se