![Tee 所有 SSH 会话输出(默认情况下)](https://linux22.com/image/158970/Tee%20%E6%89%80%E6%9C%89%20SSH%20%E4%BC%9A%E8%AF%9D%E8%BE%93%E5%87%BA%EF%BC%88%E9%BB%98%E8%AE%A4%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%89.png)
目前我正在尝试做一些类似于 PuTTY 在 Windows 上所做的事情。我想捕获 ssh 会话信息。我希望能够根据时间在日志文件中查看标准输出,并根据主机分隔日志。现在 tee 运行良好,但您始终需要记住键入 tee 以及日期和目录。那不太实用。有人知道有什么办法可以做到我所要求的吗?我考虑将本地命令选项添加到我的 ssh 配置中,但正如您想象的那样,它不能(不能)用于捕获输出,因为它似乎在 ssh 会话启动后运行命令。
答案1
您可以创建一个包装器来代替ssh
命令。它可能是:
tssh() { ssh "$@" | tee "$(date +%m_%Y_%H:%M:%S)"; }
您现在可以tssh
与通常与 一起使用的所有选项一起 使用ssh
。 SSH 会话将记录到文件中,例如
08_2019_16:43:50
.请参阅格式说明符man date
的说明。+
但是,将主机名嵌入到输出日志文件的名称中比较困难。您可以使用这样的包装器,但需要记住始终将主机作为第一个参数传递:
tssh()
{
if [ ! "$#" -eq 1 ]
then
printf "Error: Host missing\n" >&2
return 0
fi
ssh "$@" | tee "$1_$(date +%m_%Y_%H:%M:%S)"
}
例如:
$ tssh localhost -vv
$ logout
输出日志文件的名称中将包含主机名,例如:
localhost_08_2019_16:47:41