如何實現相似於Jumpserver koko同樣的終端錄製回放功能呢?本文介紹一個神器javascript
asciinema 是一款開源免費的終端錄製工具,它能夠將命令行輸入輸出的任何內容加上時間保存在文件中,同時還提供方法在終端或者web瀏覽器中進行回放java
asciinema的錄製和播放都是基於文本的,相比傳統的video有不少好處,例如錄製文件體積小,在播放的過程當中能夠暫停複製其中的文本內容等等python
同時asciinema還提供了一個網站,你若是願意還能夠將錄製的內容上傳至asciinema.org進行展現,也能夠在這裏找到不少有趣的終端錄像linux
asciinema由如下三個子項目構成:web
asciinema的安裝和使用都很是簡單,一塊兒來看看吧瀏覽器
asciinema爲python開發,能夠直接經過apt-get
、yum
或者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
,本文主要說明rec
和play
的使用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還能夠記錄執行的結果,怎麼樣,是否是很方便,趕忙試試吧
相關文章推薦閱讀: