如何實現類似於Jumpserver koko一樣的終端錄製回放功能呢?本文介紹一個神器
asciinema 是一款開源免費的終端錄製工具,它可以將命令行輸入輸出的任何內容加上時間保存在文件中,同時還提供方法在終端或者web瀏覽器中進行回放
asciinema的錄製和播放都是基於文本的,相比傳統的video有很多好處,例如錄製文件體積小,在播放的過程中可以暫停複製其中的文本內容等等
同時asciinema還提供了一個網站,你如果願意還可以將錄製的內容上傳至進行展示,也可以在這裏找到很多有趣的終端錄像
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有什麼樣的實用價值
如果希望能夠將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還可以記錄執行的結果,怎麼樣,是不是很方便,趕緊試試吧
相關文章推薦閱讀:
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計
※不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務
※Google地圖已可更新顯示潭子電動車充電站設置地點!!
※小三通物流營運型態?
※快速運回,大陸空運推薦?