有没有办法区分远程命令的输出和 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 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

相关内容