堡垒机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服务器:

omc@omc-virtual-machine:~$  cd paramiko_demo/
omc@omc-virtual-machine:~/paramiko_demo$ ll

Linux登录其他的Linux服务器

Linxu本机IP:  192.168.25.110

远程服务器IP: 192.168.25.133

omc@omc-virtual-machine:~/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 root@192.168.25.133:
*** Here we go!
Last login: Tue May 1 07:53:03 2018 from 192.168.25.110
[root@localhost ~]#

omc@omc-virtual-machine:~/paramiko_demo$ ssh  root@192.168.25.133
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.
root@192.168.25.133's password:
Last login: Tue May 1 07:44:47 2018 from 192.168.25.1
[root@localhost ~]# logout
Connection to 192.168.25.133 closed.
omc@omc-virtual-machine:~/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 root@192.168.25.133:
*** 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,就是文件会记录下左右移动的操作[此时会转换为二进制的内容]

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

  1. 审计系统---堡垒机项目之用户交互+session日志写入数据库[完整版]

    2018-06-20 时隔一个多月,忘记了之前的所有操作,重拾起来还是听不容易的,想过放弃,但还是想坚持一下,加油. 世界杯今天葡萄牙1:0战胜摩洛哥,C 罗的一个头球拯救了时间,目前有4个射球,居2 ...

  2. 审计系统---堡垒机项目之strace追踪ssh

    strace 追踪ssh的进程ID,记录操作的命令[实际上是内核里面记录的东西],进行操作日志的Py解析达到效果. 修改ssh源码添加访问标志位 源码下载:[本文示例:openssh-7.4p1.ta ...

  3. python下ssh的简单实现

    python下的ssh都需要借助第三方模块paramiko来实现,在使用前需要手动安装. 一.python实现ssh (1) linux下的ssh登录 root@ubuntu:~# ssh morra ...

  4. day29 主机管理-堡垒机2-原生ssh会话记录

    day29课堂代码:https://github.com/liyongsan/git_class/tree/master/day29 课堂笔记: 通过原生Ssh 记录会话1. 在我们自己的堡垒机交互脚 ...

  5. 审计系统---初识堡垒机180501【all】

    堡垒机背景[审计系统] SRE是指Site Reliability Engineer (/运维工程师=运行维护 业务系统) 运维: 维护系统,维护业务,跟业务去走 防火墙: 禁止不必要的访问[直接访问 ...

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

    相信各位对堡垒机(跳板机)不陌生,为了保证服务器安全,前面加个堡垒机,所有ssh连接都通过堡垒机来完成,堡垒机也需要有 身份认证,授权,访问控制,审计等功能,笔者用Python基本实现了上述功能. A ...

  7. python远程连接paramiko 模块和堡垒机实现

    paramiko使用 paramiko模块是基于python实现了SSH2远程安全连接,支持认证和密钥方式,可以实现远程连接.命令执行.文件传输.中间SSH代理功能 安装 pip install pa ...

  8. Python 13 简单项目-堡垒机

    本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功 ...

  9. Python之堡垒机

    本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功 ...

随机推荐

  1. FSM有限状态机

    1.什么是有限状态机 有限状态机(Finite State Machine),简称FSM,它由一组有限个状态.输入和根据输入及现有状态转换为下一个状态的转换函数组成,当然,通常每个状态机都必须有一个初 ...

  2. [CTSC 2018]假面

    Description 题库链接 有 \(n\) 个敌方单位,初始第 \(i\) 个单位的血量为 \(m_i\) .共 \(Q\) 次操作,分两种: 对某一个单位以 \(p\) 的概率造成 \(1\) ...

  3. pageParam要求传个JSON对象的方法

    pageParam要求传个JSON对象,使用方式:api.openWin({name: 'page1',url: 'page1.html',pageParam: {x: '1000',y: '2000 ...

  4. vs中插件影响代码自动创建后台事件问题

    CSS Tools 启用之后会影响代码自动创建后台事件,禁用之后解决.禁用之后鼠标悬浮不能看图片,颜色也不能展示

  5. 结合after使用content

    结合after或before伪类,在元素的开头或结尾附加上一定的内容,content:""的引号中即是添加的内容,比如说我们这么写: <div>学而时习之不亦说乎< ...

  6. [转] ASP.NET MVC 模型绑定的功能和问题

    摘要:本文将与你深入探究 ASP.NET MVC 模型绑定子系统的核心部分,展示模型绑定框架的每一层并提供扩展模型绑定逻辑以满足应用程序需求的各种方法. 同时,你还会看到一些经常被忽视的模型绑定技术, ...

  7. SpringBoot(八) Caching (更新中...)

    缓存配置 在springboot的主类添加注解@EnableCaching启用缓存支持 参考文档 33. Caching spring framework >>> 8. Cache ...

  8. JVM原理自总结

    一.成熟的系统调优1.一定要绝对避免循环查数据库和缓存(PS:循环里面就不能有查询缓存,更不能有查询数据库的操作,因为循环的次数没法控制) 2.对于API接口的话,一般都是直接查缓存的,没有查数据库的 ...

  9. day_02mysql表的约束设计

    首先我们复习第一天的主要内容: sql分类 知识概述 1) DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库,表,列等.关键字:create, dro ...

  10. JVM的逃逸分析

    我们都知道Java中的对象默认都是分配到堆上,在调用栈中,只保存了对象的指针.当对象不再使用后,需要依靠GC来遍历引用树并回收内存.如果堆中对象数量太多,回收对象还有整理内存,都会会带来时间上的消耗, ...