审计系统---堡垒机python下ssh的使用

堡垒机python下ssh的使用

【堡垒机更多参考】http://www.cnblogs.com/alex3714/articles/5286889.html

【paramiko的Demo实例】https://github.com/paramiko/paramiko

Win7下paramiko的Demo远程登录执行交互命令:

【下载Demo文件】     https://github.com/paramiko/paramiko

【paramiko更多参考】paramiko模块学习

本机[win7]登录远程Linux服务器

Win7本机IP:  192.168.2.102

远程服务器IP: 192.168.2.105

关于Win7下执行原代码报错问题的解决:

错误现象:TypeError: write() argument must be str, not bytes

问题解决:F:\Django\paramiko-demo\paramiko-master\demos\interactive.py

Linux下paramiko的Demo远程登录执行交互命令:

下载Demo文件

https://github.com/paramiko/paramiko

上传文件到本机Linux服务器:

[email protected]:~$  cd paramiko_demo/
[email protected]:~/paramiko_demo$  ll

Linux登录其他的Linux服务器

Linxu本机IP:  192.168.25.110

远程服务器IP: 192.168.25.133

[email protected]:~/paramiko_demo$  python3 demo.py
Hostname: 192.168.25.133
*** Unable to open host keys file
*** WARNING: Unknown host key!
Username [omc]: root
Auth by (p)assword, (r)sa key, or (d)ss key? [p]  p
Password for [email protected]:
*** Here we go!
Last login: Tue May  1 07:53:03 2018 from 192.168.25.110
[[email protected] ~]# 

[email protected]:~/paramiko_demo$ ssh  [email protected]
The authenticity of host ‘192.168.25.133 (192.168.25.133)‘ can‘t be established.
RSA key fingerprint is SHA256:+v73ij2IHBzxee8o9n5rYkBJPwD96SaEBtxkuGBBCqg.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.25.133‘ (RSA) to the list of known hosts.
[email protected]‘s password:
Last login: Tue May  1 07:44:47 2018 from 192.168.25.1
[[email protected] ~]# logout
Connection to 192.168.25.133 closed.
[email protected]:~/paramiko_demo$ python3 demo.py
Hostname: 192.168.25.133
*** Host key OK.
Username [omc]: root
Auth by (p)assword, (r)sa key, or (d)ss key? [p] p
Password for [email protected]:
*** Here we go!

注意:区别于第一次登录,第二次登录可以获取的133服务器的信息,没有了告警

paramiko的Demo分析以及改进

demo.py

interactive.py

paramiko的interactive改进:

import socket
import sys
import time
from paramiko.py3compat import u
# windows does not have termios...
try:
    import termios
    import tty

    has_termios = True
except ImportError:
    has_termios = False
def interactive_shell(chan):  # chan应该是个连接的实例
    if has_termios:  # 判断win还是Linux
        posix_shell(chan)  # posix是Linux下的协议标准
    else:
        windows_shell(chan)

def posix_shell(chan):  # chan 就是我们建立的连接实例
    import select  # IO多路复用,获取事件时会一个个的进行进行搜寻,直到找到那个事件
    oldtty = termios.tcgetattr(sys.stdin)
    try:
        tty.setraw(sys.stdin.fileno())
        tty.setcbreak(sys.stdin.fileno())
        chan.settimeout(0.0)
        cmd = []
        f = open(‘cmd.log‘, ‘a‘)
        while True:  # select循环监测
            r, w, e = select.select([chan, sys.stdin], [], [])  # 3个参数分别为输入,输出,错误信息
            if chan in r:  # 如果远程有返回命令的结果,进行结果输出
                try:
                    x = u(chan.recv(1024))  # 每次接收1KB的长度
                    if len(x) == 0:  # 长度为0,表示没有接收到
                        sys.stdout.write(‘\r\n*** EOF\r\n‘)
                        break
                    sys.stdout.write(x)  # 接收到的结果写入屏幕
                    sys.stdout.flush()  # 实时将内容刷入标准输出[屏幕]
                except socket.timeout:
                    pass
            if sys.stdin in r:  # 标准输入,即键盘输入
                x = sys.stdin.read(1)  # read()函数,输入一个读取一个发送一个[回车代表命令输入完成可以执行任务]
                if(x == ‘\r‘):   # Linux下的回车是\r
                    # print("".join(cmd))
                    cmd_log_format = "%s-%s-%s\r" % (time.ctime(time.time()), ‘root‘, "".join(cmd))
                    f.write(cmd_log_format)
                    cmd = []  # 情况作为下次使用
                else:
                    cmd.append(x)
                if len(x) == 0:
                    break
                chan.send(x)  # 如果读到了输入内容,则发送到远程进行操作
    finally:
        termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)

# thanks to Mike Looijmans for this code
def windows_shell(chan):
    import threading
    sys.stdout.write("Line-buffered terminal emulation. Press F6 or ^Z to send EOF.\r\n\r\n")
    def writeall(sock):
        while True:
            data = sock.recv(256)
            if not data:
                sys.stdout.write(‘\r\n*** EOF ***\r\n\r\n‘)
                sys.stdout.flush()
                break
            sys.stdout.write(data.decode("utf-8"))
            sys.stdout.flush()
    writer = threading.Thread(target=writeall, args=(chan,))
    writer.start()
    try:
        while True:
            d = sys.stdin.read(1)
            if not d:
                break
            chan.send(d)
    except EOFError:
        # user hit ^Z or F6
        pass

注:记录了文件,但是由点小bug,就是文件会记录下左右移动的操作[此时会转换为二进制的内容]

原文地址:https://www.cnblogs.com/ftl1012/p/9458889.html

时间: 2024-11-06 20:32:30

审计系统---堡垒机python下ssh的使用的相关文章

利用Python在堡垒机模式下批量管理后端nginx服务器

在集群环境中,有时候需要批量修改nginx配置,或批量添加vhost主机.手动一个个添加,效率太慢,借助Fabric写了一个批量分发的脚本,会提高不少效率. 思路: (1.在一台nginx修改配置或添加vhost主机,并测试; (2.测试成功后,将配制文件推送至堡垒机(跳板机); (3.在堡垒机上将配置文件分发至其他nginx服务器 [如果原有文件存在,则先备份] ; 只是在堡垒机环境下一个简单的推送文件脚本,比较简陋,代码如下: # -*- coding:utf-8 -*- #! /usr/b

运维堡垒机(跳板机)系统 python

相信各位对堡垒机(跳板机)不陌生,为了保证服务器安全,前面加个堡垒机,所有ssh连接都通过堡垒机来完成,堡垒机也需要有 身份认证,授权,访问控制,审计等功能,笔者用Python基本实现了上述功能. AD:2014WOT全球软件技术峰会北京站 课程视频发布 11月21日-22日 与WOT技术大会相约深圳 现在抢票 相信各位对堡垒机(跳板机)不陌生,为了保证服务器安全,前面加个堡垒机,所有ssh连接都通过堡垒机来完成,堡垒机也需要有 身份认证,授权,访问控制,审计等功能,笔者用Python基本实现了

Python 13 简单项目-堡垒机

本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中一项而已,下面我就给大家介绍一下堡垒机的重要性,以帮助大家参考自己公司的业务是否需要部署堡垒机. 堡垒机有以下两个至关重要的功能: 权限管理 当你公司的服务器变的越来越多后,需要操作这些服务器的人就肯定不只是一个运维人员,同时也可能包括多个开发人员,那么这么多的人

Python之堡垒机

本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中一项而已,下面我就给大家介绍一下堡垒机的重要性,以帮助大家参考自己公司的业务是否需要部署堡垒机. 堡垒机有以下两个至关重要的功能: 权限管理 当你公司的服务器变的越来越多后,需要操作这些服务器的人就肯定不只是一个运维人员,同时也可能包括多个开发人员,那么这么多的人

主机管理+堡垒机系统开发

本节内容 需求讨论 构架设计 表结构设计 程序开发 1.需求讨论 实现对用户的权限管理,能访问哪些机器,在被访问的机器上有哪些权限 实现可以通过web页面对指定主机列表 进行 批量发布命令.文件 实现对用户操作进行纪录 2.架构设计 3. 表结构设计 参考 http://www.cnblogs.com/alex3714/articles/5286889.html 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,

python 堡垒机续-----终端方式

第一步:环境准备 堡垒机服务器:192.168.1.1 后端服务器1:192.168.1.2 后端服务器2:192.168.1.3 堡垒机安装paramiko 版本:paramiko-1.16.0 堡垒机python版本:Python 2.7.7   第二步:编写menu.py文件,实现类似菜单功能 #!/usr/bin/env python # encoding: utf-8 # @author: eddy # @contact: [email protected] # @site: http

那些年被我坑过的Python——第十三章:一夫当关(设计堡垒机)

  堡垒机架构 堡垒机的主要作用权限控制和用户行为审计,堡垒机就像一个城堡的大门,城堡里的所有建筑就是你不同的业务系统 , 每个想进入城堡的人都必须经过城堡大门并经过大门守卫的授权,每个进入城堡的人必须且只能严格按守卫的分配进入指定的建筑,且每个建筑物还有自己的权限访 问控制,不同级别的人可以到建筑物里不同楼层的访问级别也是不一样的.还有就是,每个进入城堡的人的所有行为和足迹都会被严格的监控和纪录下来,一旦发生 犯罪事件,城堡管理人员就可以通过这些监控纪录来追踪责任人. 堡垒要想成功完全记到他的

Python之路,Day13 - 堡垒机

项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中一项而已,下面我就给大家介绍一下堡垒机的重要性,以帮助大家参考自己公司的业务是否需要部署堡垒机. 堡垒机有以下两个至关重要的功能: 权限管理 当你公司的服务器变的越来越多后,需要操作这些服务器的人就肯定不只是一个运维人员,同时也可能包括多个开发人员,那么这么多的人操作业务系

Python成长笔记 - 基础篇 (十四)--堡垒机

堡垒机架构 堡垒机的主要作用权限控制和用户行为审计,堡垒机就像一个城堡的大门,城堡里的所有建筑就是你不同的业务系统 , 每个想进入城堡的人都必须经过城堡大门并经过大门守卫的授权,每个进入城堡的人必须且只能严格按守卫的分配进入指定的建筑,且每个建筑物还有自己的权限访问控制,不同级别的人可以到建筑物里不同楼层的访问级别也是不一样的.还有就是,每个进入城堡的人的所有行为和足迹都会被严格的监控和纪录下来,一旦发生犯罪事件,城堡管理人员就可以通过这些监控纪录来追踪责任人. 堡垒要想成功完全记到他的作用,只