有沒有辦法區分遠端命令的輸出和 ssh 本身的輸出?

有沒有辦法區分遠端命令的輸出和 ssh 本身的輸出?

我透過 ssh 執行遠端命令,我需要解析該命令的輸出。遠端 stdout/stderr 透過 ssh 很好地轉送回本機 ssh 指令的 stdout/stderr 上的本機方塊。但是,當 ssh 在我的本機 stdout/stderr 上重複使用其自己的狀態/錯誤訊息時,此操作會失敗。

有沒有辦法告訴我的本地 ssh 命令將其自己的訊息發送到本地文件?或者我是否需要讓我的遠端命令將它們自己的輸出發送到一對遠端文件,然後 scp 將它們返回以安全地解析它們?

答案1

SSH 用戶端有兩個開關來減少/消除冗長。

人SSH:

-q       Quiet mode.  Causes all warning and diagnostic messages to be
         suppressed.

-y       Send log information using the syslog(3) system module.  By
         default this information is sent to stderr.

-y開關可能是您想要的,但並非在所有版本中都可用。

Ubuntu 的當前版本(OpenSSH_6.0p1 Debian-3ubuntu1、OpenSSL 1.0.1c 10 May 2012)支援它,但其他版本可能不支援。

如果您願意,您可以將有關 ssh 的日誌保存在不同的日誌檔案中。

例如,如果您使用 rsyslog,請建立該檔案/etc/rsyslog.d/ssh.log並將下列行儲存到其中:

:msg,contains,"ssh:" /var/log/ssh.log

現在透過執行以下命令重新啟動 rsyslog:

sudo service rsyslog restart

要存取有關具有 PID 的特定 ssh 進程的日誌$PID,您可以使用 grep:

grep "ssh\[$PID\]" /var/log/ssh.log

相關內容