我正在尋找一種運行 SSH(特別是 OpenSSH,但不一定)並將我對遠端運行的所有命令記錄到本地檔案的方法。
將每個命令作為獨立的 ssh 命令運行確實會將每個命令記錄到我的本地歷史記錄中,但通常不希望運行例如
ssh [email protected] -- foo -a --bar baz
對於每個命令。
我寧願以正常方式 ssh 進入伺服器,無論是透過 ssh 本身,還是透過包裝命令,例如「ssh-logging」。
我設想程式將透過ssh 輸入的命令保存到本地客戶端電腦上的檔案中,與shell 的操作方式類似,例如~/.ssh_history 似乎是一個很好的預設值,也許可以根據使用者+主機組合進行排列,但我不這樣做此刻真的很關心它保存在哪裡。
簡而言之,我希望發生類似以下的事情:
~ $ ssh [email protected]
[user@host ~]$ foo --bar
[user@host ~]$ exit
~ $ cat .ssh_history_user@host
foo --bar
exit
~ $
這樣的東西是否存在,或者作為一個晦澀的OpenSSH 客戶端配置,或者作為另一個開源/libre ssh 客戶端的一部分,或者作為一個瘦包裝程序,可以簡單地將自己置於用戶的標準輸入輸入中,並透明地發送在記錄它們時將它們發送到正在運行的程式的標準輸入? (我聽說SecureCRT有一個日誌功能,大概是這樣的,但至少在我的個人生活中我不想使用非FLOSS工具)。
答案1
如果您使用的是 unix,則標準實用程序script
就是為此目的而設計的。如果不帶參數運行script
,它將啟動 shell 的副本並將會話記錄到名為「typescript」的檔案中:
~ jdoe$ script
Script started, output file is typescript
bash-3.2$ date
Fri May 8 16:29:44 EDT 2015
bash-3.2$ exit
exit
Script done, output file is typescript
~ jdoe$ cat typescript
Script started on Fri May 8 16:29:42 2015
bash-3.2$ date
Fri May 8 16:29:44 EDT 2015
bash-3.2$ exit
exit
Script done on Fri May 8 16:29:45 2015
~ jdoe$
您可以指定要登入的檔案和要執行的命令,而不是 shell。這部分尚未完全標準化。在我的 OSX 系統上,您可以像這樣運行它:
script name-of-log-file command arg...
eg
script ssh-log ssh user@somehost
對於常見的 Linux 版本,您可以像這樣運行它:
script -c 'command arg...' name-of-log-file
eg
script -c 'ssh user@somehost' ssh-log
答案2
謝謝歐根·里克關於透過 tee 管道 ssh 的評論,我能夠實現圍繞 ssh 的日誌記錄包裝器這就是我一直在尋找的。