我通过 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 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