你可以直接在伺服器端擷取 SSH 工作階段,並將其轉換為可回放的錄製內容。實現這件事的方法有很多:內建的 script 指令、asciinema、ttyrec,以及 Teleport 和 JumpServer 這類商業化工作階段錄製閘道。每一種方案都是在偽終端層級擷取終端活動,因此回放時會像觀看一段工作階段「影片」一樣重現整個操作過程。

你真正關心的是實際落地:哪一種方法最適合你的環境,以及今天該如何部署?答案取決於你的目標。有些團隊只需要在單一主機上快速錄製;有些團隊更重視可分享的回放、傳統相容性,或集中式的合規控制。本指南將幫助你根據稽核、故障排除或培訓的需求,選擇最合適的方式來錄製操作影片。

SSH 錄製是如何運作的

文字日誌與可回放錄製的差異

一般文字日誌只會儲存操作人員輸入的字元,以及伺服器回傳的輸出內容。你得到的是一份平面的文字記錄。它的確能告訴你執行了哪些指令,但會失去事件發生的順序感和節奏感。可回放錄製則會保留相同內容,並額外記錄時間資訊。每一次按鍵、每一行輸出都會帶有時間戳記。播放時,系統會依照原始節奏重現整個工作階段,讓你看到指令何時執行、結果在幾秒後如何出現,就像操作人員當時所看到的一樣。

第二個關鍵差異在於跳脫序列。終端程式會傳送控制碼,用來顯示顏色、移動游標,以及進行全螢幕重繪。文字日誌通常會移除這些控制碼,或把它們儲存成難以閱讀的雜亂內容。而錄製檔案則會保留這些資訊,播放器在回放時再加以解析。因此,選單、進度條和互動式編輯器都能正確呈現。你還可以在時間軸上拖曳、暫停,精準定位到設定變更出錯的那個瞬間。

面向文字日誌可回放錄製
內容僅包含字元字元、時間資訊與控制碼
回放方式靜態閱讀依時間節奏進行視覺化回放
最適合快速 grep 檢索稽核、培訓、事故檢討

伺服器端擷取與 pty

每一次 SSH 登入,主機都會分配一個偽終端,也就是 pty。Shell、指令和應用程式都透過這個 pty 進行讀寫。如果你在這一層進行擷取,就等於位於操作人員與 shell 之間。任何輸入輸出在到達行程之前,都會經過你的擷取點。

這種位置上的優勢解決了一個常見缺口。用戶端工具只能錄製那些已安裝軟體的裝置。如果操作人員使用個人筆電、跳板機,或平板裝置連線,那麼這些用戶端軟體就可能被完全繞過。而伺服器端擷取是跟隨工作階段本身進行的,因此一旦驗證成功,錄製就會自動開始。操作人員本機環境如何設定不再重要。你只需在主機上完成一次設定,就能涵蓋所有連線者,並讓整個團隊、所有班次都擁有一致的錄製歸檔方式。

錄製操作影片的方法

使用 script 指令進行錄製

script 工具隨大多數 Linux 發行版一同提供,通常屬於 util-linux 套件,因此你不需要額外安裝,也不需要獨立的設定檔。它會把終端中經過的所有內容寫入檔案;如果你啟用時間記錄,還會連同時間資訊一起保存。

使用 script session.log 即可開始錄製。該工具會開啟一個新的 shell,之後所有按鍵與輸出都會寫入這個檔案。輸入 exit 即可結束錄製。若要將時間資訊儲存到獨立檔案,可加上 -t 參數:script -t timing.log session.log。之後可透過 scriptreplay timing.log session.log 回放工作階段。回放會遵循原始延遲,因此效果看起來就像是一段終端操作影片。播放器也支援速度除數參數,這樣你可以更快瀏覽較長的工作階段。請務必將時間檔案與工作階段檔案放在一起,因為播放器需要同時使用這兩個檔案。

若想實現自動錄製,可以把指令寫入使用者的 shell 設定檔。例如,像 script -q -a /var/log/sessions/USER-(date +%s).log 這樣一行指令,就可以把每次登入的內容追加到帶有時間戳記的檔案中。參數 -q 用於隱藏啟動提示。這種方式不需要安裝新套件,就能在任何主機上實現輕量級的操作影片錄製。你可以再搭配日誌輪替,以免舊檔案占滿磁碟。需要注意的是,script 儲存的是原始終端輸出,因此播放器必須正確解析跳脫碼。在真正依賴歸檔之前,先測試一次回放效果。

使用 asciinema 與 ttyrec 錄製操作影片

asciinema 能產生精簡、便於分享的錄製檔案。你可以透過套件管理器安裝它,例如 apt install asciinema 或 pip install asciinema。該工具依賴 Python,而大多數伺服器本身已具備該執行環境。安裝前請確認直譯器版本符合工具要求。執行 asciinema rec demo.cast 開始錄製,按下 Ctrl-D 結束。你可以用 asciinema play demo.cast 回放檔案,或上傳到 asciinema.org,產生一個供團隊成員在瀏覽器中開啟的連結。cast 格式儲存的是文字與時間資訊,因此檔案大小通常很小。你還可以透過 --idle-time-limit 參數限制閒置停頓時間,並在使用者家目錄下的設定檔中設定預設值,以便往後每一次錄製都自動套用這些選項。

ttyrec 的模式與之相似,但歷史更久。你可以透過發行版套件庫安裝,例如 apt install ttyrec。執行 ttyrec session.tty 開始錄製,按 Ctrl-D 結束。使用 ttyplay session.tty 回放。參數 -a 可將內容追加到現有檔案中,這在你希望每位操作人員都維護一份統一歸檔檔案時非常有用。該格式獲得廣泛播放器支援,因此當你需要開啟舊檔案時會很方便。社群中也有腳本可將 ttyrec 檔案轉換為其他格式。由於這兩種工具都是在工作階段內部進行擷取,因此更適合希望自行保存個人錄製內容的操作人員。

如果你需要在整個伺服器叢集範圍內統一擷取,工作階段管理閘道如 Teleport 和 JumpServer 則可以在代理層記錄所有工作階段。它們提供集中式儲存、存取政策與搜尋能力。每一份錄製都會附帶使用者、主機、開始時間等中繼資料。你只需設定一次閘道,經過它的全部流量都能被回放。相較於單一指令,這類方案部署起來需要更多規劃,但回報是涵蓋範圍一致且管理標準統一。請查閱廠商文件,確認其支援的協定與儲存後端。這類方案非常適合需要在大量伺服器上實現一致錄製能力的團隊。

錄製方法比較

效能與成本

每一種錄製方式都會替伺服器帶來一定負載,而負載大小主要取決於擷取發生在哪一層。script 指令以本地行程形式執行於登入 shell 內部。它將原始終端輸出寫入磁碟,因此負擔較低且可預期。asciinema 和 ttyrec 的運作方式類似,同樣是在工作階段旁執行一個輕量行程。它們的 cast 檔與 tty 檔只儲存文字與時間資訊,因此歸檔檔案通常較小,儲存成本也相對較低。像 Teleport 和 JumpServer 這樣的託管閘道則會在前方增加一層代理。這一層需要處理加密、儲存與索引所有連線,因此會提高閘道主機上的資源消耗。你是用更多運算資源換取集中控制能力。

成本結構也遵循相同規律。這三種命令列工具基本上都是免費隨發行版提供,或可從公開套件庫安裝,不需要授權費用。真正的成本在於儲存,以及團隊為設定輪替與存取控制規則所投入的時間。商業化閘道則會產生授權費與基礎設施成本,而且這些成本往往會隨著帳號數與伺服器數量成長而上升。對於僅有少量主機的小型團隊來說,內建工具通常更具經濟效益。對於擁有大規模伺服器叢集與眾多操作人員的環境,閘道成本往往更容易被合理化,因為一個平台就能取代零散的腳本體系。

使用情境的匹配程度和價格同樣重要。如果你只想在單一主機上零門檻開啟錄製,選擇 script。如果你需要一個同事可以直接在瀏覽器中開啟的分享連結,選擇 asciinema。如果你必須相容舊檔案,並依賴長期存在的播放器支援,選擇 ttyrec。如果你需要在大量機器上取得一致涵蓋,並希望擁有可搜尋索引,選擇託管閘道。你也可以混合使用,例如在開發者機器上使用 asciinema,在正式環境中使用閘道。

合規適配性

比起純粹的效能指標,合規要求往往更能決定最終方案。稽核人員希望看到:每一次工作階段都被完整擷取、歸檔內容未被竄改,而且只有授權人員才能查看。命令列工具能幫你完成「錄製」本身,但檔案防竄改與存取控制需要你自行設計並落實。你必須收緊檔案權限、把日誌送到集中式儲存,並保留誰檢視過哪些內容的稽核軌跡。這些工作完全做得到,而且許多團隊都透過嚴謹腳本實現了良好成果。

託管閘道則把這些控制能力直接內建在平台中。它們會把每一段錄製與一個已驗證身分綁定,將內容儲存到集中式後端,並記錄每一次回放操作。這種設計非常適合受監管環境,因為你需要向稽核方證明完整的證據鏈。代價則是更強的廠商依賴,以及更複雜、更厚重的部署過程。

先根據稽核義務選擇工具,再考慮預算。一個存取控制薄弱的免費工具,在合規審查中造成的代價,可能比一個付費平台更高。

無論你選擇哪條路線,在大規模推廣前都應先完整測試一次回放流程。確認時間節奏正確、顏色渲染正常,且檔案能夠在你選定的播放器中順利開啟。然後再搭配保留政策與明確的觀看權限規則進行推廣。這樣做能讓你的錄製工作始終圍繞其真正目的展開:稽核、故障排除或培訓。只有以這種紀律來錄製操作影片,團隊在數月後遇到問題時,才能真正信任這些歸檔內容。

錄製最佳實務

儲存與保留

應將錄製檔案送到集中式位置,而不是保存在各台主機的本機磁碟上。共享掛載、物件儲存,或者閘道本身的後端,都能把檔案集中起來,並在伺服器重建後依然保留。只保存在本機的檔案會在機器被替換時消失,也會隨著伺服器數量成長而分散各處。集中儲存還能讓你對所有歸檔統一套用一套保留規則。

設定與稽核要求及磁碟預算相匹配的保留週期。保留時間要足夠長,以便在幾個月後仍能回答相關問題;之後則按計畫刪除。可使用 cron 工作或日誌管理工具來自動輪替。不要在未驗證的情況下直接信任刪除工作,因為一個失效的清理腳本會悄悄地把磁碟占滿。為事故檢討而錄製操作影片的團隊,通常會設定比合規情境更短的保留期間。

安全與存取

應將錄製檔案視為敏感資料。工作階段中可能包含明文輸入的密碼、螢幕上顯示的客戶資料,以及內部主機名稱。只向確有需要的人員開放讀取權限,並記錄每一次回放。對於共享主機而言,僅依賴檔案權限的保護較為薄弱,因此更建議使用具備角色型存取控制的集中式儲存。

還要防止竄改。將錄製內容寫入僅追加儲存,或寫入可保留不可變副本的後端。檔案關閉時計算校驗和,並將其分開保存,如此一來你日後就能證明歸檔未被修改。再為每段錄製配套一份稽核軌跡,註明操作人員、主機、開始時間,以及所有觀看過回放的人。這樣完整的一條證據鏈,才能讓原始檔案真正成為稽核人員認可的資料。

在大規模推廣前,先完整測試一次回放流程。確認時間節奏、顏色渲染以及存取控制規則都符合預期。

選擇與你的目標相匹配的工具。若想在單一主機上快速使用內建能力進行錄製,選擇 script。若需要輕量且便於分享的回放,選擇 asciinema。若你需要經典相容性,選擇 ttyrec。若處於合規要求嚴格的環境,則選擇像 Teleport 或 JumpServer 這樣的託管閘道。

從小範圍開始。先在一台伺服器上試行,然後在擴展前驗證回放品質。檢查時間節奏、顏色呈現以及播放器相容性。接著再在具備保留政策與存取控制政策的前提下進行推廣。

最後,請始終讓工具服務於你的目標。無論是為了稽核、故障排除還是培訓而錄製操作影片,都應讓這個目的主導你的每一項選擇。只有目標明確,歸檔內容在幾個月後回頭查看時才真正有價值。

常見問題

工作階段錄製會擷取在提示字元中輸入的密碼嗎?

會。擷取發生在偽終端層,因此每一次按鍵都會寫入檔案,包括密碼與螢幕上顯示的敏感資訊。請將每一份歸檔都視為敏感資料。只允許授權人員進行回放,並將檔案儲存在受保護的後端中。絕不要透過公開連結分享原始 cast 檔案。

能否在操作人員不知情的情況下擷取工作階段?

可以,很多合規專案確實就是這樣做的。伺服器端擷取運作於操作人員控制範圍之外,因此無論其本機如何設定,都會在登入後立即開始錄製。不過你應先查核當地法律法規以及僱傭協議。在許多司法管轄區,你必須告知使用者其工作階段正受到監控。

這些錄製檔案會占用多少磁碟空間?

以文字為基礎的錄製檔案通常較小,因為它們儲存的是字元與時間資訊,而不是影片影格。實際大小取決於工作階段長度和輸出量。請先在自己的主機上測量幾段真實工作階段,再根據樣本規劃儲存容量。同時設定保留週期並自動清理,以防歸檔無限制成長。

script 指令在所有 Linux 伺服器上都可用嗎?

它屬於 util-linux,而大多數發行版預設都會包含該套件。在依賴它之前,請先確認你的基礎映像中確實存在該套件。極簡容器和某些嵌入式系統可能並未包含它。在標準化部署前,先在一台主機上做一次快速錄製與回放測試。

如何確認錄製檔案可以正確回放?

用你選定的播放器把一份檔案從頭到尾回放一遍。檢查時間節奏是否自然、顏色是否正常顯示、全螢幕程式是否能正確重繪。再確認該檔案能在另一台機器上開啟,而不只是錄製它的那台機器。每次工具或播放器升級後,都應重複進行這項檢查。