简单分析实现运维利器---web远程ssh终端录像回放libl

本文介绍了如何在Django运维系统中添加webSSH终端录像回放功能,利用asciinema技术记录和播放ssh终端操作。详细阐述了实现思路,包括asciinema文件格式、录制过程及创建html页面展示回放列表的步骤。
摘要由CSDN通过智能技术生成

背景

趁着上次实现了基础的运维系统功能—-webssh,那就趁热打铁!继续补充一个web远程ssh终端录像回放功能。

一、思路

网上找了一下大家实现webssh录像回放的方案,度娘搜的文章统一都是—用asciinema!仔细看了相关技术文档之后确实阿!我一开始以为需要视频文件。没想到,asciinema用特定的格式文件就可以实现视频流。(在写asciinemaweb技术的时候有个大坑- -.琢磨我两个小时,待会说具体问题)

asciinema实际就是 通过系统输出的信息,将信息写成asciinema特定的格式文件,包含header与data两大部分(也是待会从文章中讲解两部分的结构)。它就能解析成视频。所以我们在昨天的功能逻辑之上:

1.连接ssh成功后,构造头部内容写入文件中

2.将开头两条输出信息以特定的格式写入文件中

3.将线程监听回来的所有输出信息以特定的格式写入文件中

其中2.3已经包含了我们webssh所有的输出信息了,已经足以构成录像回放

4.创建html页面展示回访列表

二、实现

0.先说明一下asciinema文件的格式。

头部:

header = {
    "version": 2,  #(asciinema)版本
    "width": 160, #(asciinema)回放时的宽度
    "height": 48, #(asciinema)回放时的高度
    "timestamp": date, #(asciinema)时间戳 用于播放
    "env": {"SHELL": "/bin/bash",  #(asciinema)使用的shell类型
    "TERM": "xterm-256color"}, #(asciinema)终端颜色
    "title": "video"  #(asciinema)标题
}

data:

[0.00699162483215332, “o”, “Last login: Thu May 7 18:42:13 2020 from 192.168.254.1\r\r\n”]
[0.1905069351196289, “o”, "[root@leestudy ~]# "] #第一个字段为时间戳,第二个字段“o”为输出,“i”为输入,第三个字段为“(o)输出信息/(i)输入信息”

1.连接ssh成功后写入header

        sshsession = client.get_transport().open_session()
        sshsession.get_pty()
        sshsession.invoke_shell()

        asciinemadir = settings.BASE_DIR + '/static/asciinemadir/' #定义一个存放文件的目录(喜欢的也可以保存在数据库)
        if not os.path.isdir(asciinemadir):
            os.makedirs(asciinemadir)
        starttime=time.strftime("%Y%m%d%H%M%S") #用于记录开始时间
        filena =ip+starttime         #文件名,用ip+开始时间为文件名
        date=time.time()             #开始时间戳
        print(date)
        header = {
            "version": 2,
            "width": 160,
            "height": 48,
            "timestamp": date,   #开始时间戳
            "en
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值