Linux 终端回放神器:如何优雅的使用 Asciinema

发表于:2019-11-15 11:03

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:37丫37    来源:运维咖啡吧

  如何实现类似于Jumpserver koko一样的终端录制回放功能呢?本文介绍一个神器。
  asciinema 是一款开源免费的终端录制工具,它可以将命令行输入输出的任何内容加上时间保存在文件中,同时还提供方法在终端或者web浏览器中进行回放。
  asciinema的录制和播放都是基于文本的,相比传统的video有很多好处,例如录制文件体积小,在播放的过程中可以暂停复制其中的文本内容等等。同时 asciinema 还提供了一个网站,你如果愿意还可以将录制的内容上传至 asciinema.org 进行展示,也可以在这里找到很多有趣的终端录像。asciinema 由以下三个子项目构成:
  asciinema:基于命令行的终端会话记录
  asciinema.org:提供API供上传录像和展示的网站
  javascript player:用于在web上播放录像的js播放器
  asciinema 的安装和使用都非常简单,一起来看看吧
  安装
  asciinema 为 python 开发,可以直接通过apt-get、yum或者pip进行安装
 # apt-get install asciinema
  安装完成后查看版本
   # asciinema --version
  asciinema 2.0.2
  asciinema 有v1和v2两个版本,差异较大,咖啡君使用了v2,以下所有内容也基于v2演示。
  asciinema 有5个参数,分别为录制:rec,播放:play,以文件形式查看录制内容:cat,上传文件到 asciinema.org 网站:upload、asciinema.org 账号认证:auth,本文主要说明rec和play的使用。
  录制
  # asciinema rec ops-coffee.cast
  有几个参数可以使用:
  --stdin表示启用标准输入录制,意思是通常情况下linux输入密码类的信息都不会显示,如果开启了这个选项,可以记录键盘输出的密码,但这个功能官方似乎还没有支持,加了后看不到效果。
  --append 添加录制到已存在的文件中。
  --raw 保存原始STDOUT输出,无需定时信息等。
  --overwrite 如果文件已存在,则覆盖。
  -c 要记录的命令,默认为$SHELL。
  -e 要捕获的环境变量列表,默认为SHELL,TERM。
  -t 后跟数字,指定录像的title。
  -i 后跟数字,设置录制时记录的最大空闲时间。
  -y 所有提示都输入yes
  -q 静默模式,加了此参数在进入录制或者退出录制时都没有提示。
  输入exit或按ctrl+D组合键退出录制。
  播放
 # asciinema play ops-coffee.cast
  有两个参数可以使用:
  -s 后边跟数字,表示用几倍的速度来播放录像
  -i 后边跟数字,表示在播放录像时空闲时间的最大秒数
  在播放的过程中你可以通过空格来控制暂停或播放,也可以通过ctrl+c组合键来退出播放,当你按空格键暂停时,可以通过.号来逐帧显示接下来要播放的内容。
  文件
  asciinema 推荐的文件后缀是.cast,当然linux是不关心文件后缀的,你用什么都可以,推荐按规范使用.cast,文件内容大概如下
   # cat ops-coffee.cast
  {"version": 2, "width": 237, "height": 55, "timestamp": 1572646909, "env": {"SHELL": "/bin/bash", "TERM": "linux"}, "title": "ops-coffee"}
  [0.010014, "o", "root@onlinegame:~# "]
  [1.296458, "o", "exit"]
  [1.976439, "o", "\r\n"]
  [1.976532, "o", "exit\r\n"]
  cast 文件主要有两部分组成,位于第一行的一个字典,这里叫 header
   {
  "version": 2,
  "width": 237,
  "height": 55,
  "timestamp": 1572646909,
  "env": {
  "SHELL": "/bin/bash",
  "TERM": "linux"
  },
  "title": "ops-coffee"
  }
  header很简单,字段的意思分别为:version版本,width和height分别表示录制窗口的宽高,timestamp录制开始的时间戳,env录制时指定的-e参数设置,title录制时指定的-t参数设置。
  接下来的都是固定格式的内容,实际上就是IO流信息
 [0.010014, "o", "root@onlinegame:~# "]
  每一行都是由三部分组成的一个列表
  第一部分为一个浮点数,表示输入输出这一行内容所花的时间
  第二部分似乎是一个固定的字符串,没有找到说明做什么用的
  第三部分就是具体的输入输出的内容
  这个文件格式设计还是非常优雅的,开头 header 声明,后边具体内容,如果中途因为任何意外导致录像终止,也不会丢失整个录像,而且还可以 append 增加录像,这在需要长时间暂停录制时非常有用,更重要的是可以流式读取,几乎很少占用内存,不需要把整个录像文件都放在内存中,对长时间的录制播放更友好。
  自动录制审计日志
  如果你有经历过严格的IT审计,或者有用到堡垒机,就会知道操作过程是需要记录并加入审计的,如果你有因为不知道是谁操作了什么导致了数据被删而背锅的经历,就会知道对操作过程的记录有多么的重要,接下来以一个简单的案例来介绍asciinema有什么样的实用价值。
  非常简单,只需要在 devuser 用户的家目录下添加.bash_profile文件即可,内容如下:
   $ cat ~/.bash_profile
  export LC_ALL=en_US.UTF-8
  /usr/local/bin/asciinema rec /tmp/$USER-$(date +%Y%m%d%H%M%S).log -q
  添加export LC_ALL=en_US.UTF-8的原因是有可能系统会报错:
 asciinema needs a UTF-8 native locale to run. Check the output of locale command.
  rec命令进行录制时添加了-q 参数,这样在进入或者退出时都不会有任何关于 asciinema 的提示,使用简单方便。
  这样 devuser 用户每次登陆就会自动开启一个录像,如果需要审计或检查操作,只需要回放录像就可以了。
  你可能会说history命令一样可以记录用户操作,asciinema 有什么优势呢?asciinema 不仅可以记录用户的输入,还可以记录系统的输出,也就是说history只能记录执行的命令,而 asciinema 还可以记录执行的结果,怎么样,是不是很方便,赶紧试试吧。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号