リモート コマンドの出力と ssh 自体の出力を区別する方法はありますか?

リモート コマンドの出力と ssh 自体の出力を区別する方法はありますか?

私は ssh 経由でリモート コマンドを実行し、そのコマンドの出力を解析する必要があります。リモートの stdout/stderr は、ローカル ssh コマンドの stdout/stderr で ssh によってローカル ボックスに正常に転送されます。ただし、ssh がローカル stdout/stderr で独自のステータス/エラー メッセージを多重化すると、これは失敗します。

ローカルの ssh コマンドに、独自のメッセージをローカル ファイルに送信するように指示する方法はありますか? または、リモート コマンドに独自の出力を 1 組のリモート ファイルに送信させてから、それらを scp で戻して安全に解析する必要がありますか?

答え1

SSH クライアントには、冗長性を削減/排除するための 2 つのスイッチがあります。

から男の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 2012 年 5 月 10 日) はこれをサポートしていますが、他のバージョンではサポートされていない可能性があります。

必要に応じて、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

関連情報