有没有办法区分远程命令的输出和 ssh 本身的输出?

mat*_*ieu 5 linux ssh

我通过 ssh 执行远程命令,我需要解析该命令的输出。远程 stdout/stderr 可以通过 ssh 很好地转发回我本地 ssh 命令的 stdout/stderr 上的本地框。但是,当 ssh 在我的本地 stdout/stderr 上多路复用它自己的状态/错误消息时,这会失败。

有没有办法告诉我的本地 ssh 命令将自己的消息发送到本地文件?或者我是否需要让我的远程命令将它们自己的输出发送到一对远程文件,然后将它们 scp 返回以安全地解析它们?

Den*_*nis 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.
Run Code Online (Sandbox Code Playgroud)

-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
Run Code Online (Sandbox Code Playgroud)

现在通过执行以下命令重新启动 rsyslog:

sudo service rsyslog restart
Run Code Online (Sandbox Code Playgroud)

要访问有关具有 PID 的特定 ssh 进程的日志$PID,您可以使用 grep:

grep "ssh\[$PID\]" /var/log/ssh.log
Run Code Online (Sandbox Code Playgroud)