Asciinema:你的全部操做都將被錄製

如何實現相似於Jumpserver koko同樣的終端錄製回放功能呢?本文介紹一個神器javascript

asciinema 是一款開源免費的終端錄製工具,它能夠將命令行輸入輸出的任何內容加上時間保存在文件中,同時還提供方法在終端或者web瀏覽器中進行回放java

asciinema的錄製和播放都是基於文本的,相比傳統的video有不少好處,例如錄製文件體積小,在播放的過程當中能夠暫停複製其中的文本內容等等python

同時asciinema還提供了一個網站,你若是願意還能夠將錄製的內容上傳至asciinema.org進行展現,也能夠在這裏找到不少有趣的終端錄像linux

asciinema由如下三個子項目構成:web

  1. asciinema:基於命令行的終端會話記錄器
  2. asciinema.org:提供API供上傳錄像和展現的網站
  3. javascript player:用於在web上播放錄像的js播放器

asciinema的安裝和使用都很是簡單,一塊兒來看看吧瀏覽器

安裝

asciinema爲python開發,能夠直接經過apt-getyum或者pip進行安裝bash

# apt-get install asciinema

安裝完成後查看版本服務器

# asciinema --version
asciinema 2.0.2

asciinema有v1和v2兩個版本,差別較大,咖啡君使用了v2,如下全部內容也基於v2演示app

asciinema有5個參數,分別爲錄製:rec,播放:play,以文件形式查看錄製內容:cat,上傳文件到asciinema.org網站:upload、asciinema.org帳號認證:auth,本文主要說明recplay的使用ide

錄製

# 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有什麼樣的實用價值

若是但願可以將linux服務器上devuser的全部操做過程都記錄下來,以備後續審計使用,該如何實現呢?

很是簡單,只須要在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還能夠記錄執行的結果,怎麼樣,是否是很方便,趕忙試試吧


掃碼關注公衆號查看更多實用文章

相關文章推薦閱讀:

相關文章
相關標籤/搜索