私は 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