怎样才能抑制 /etc/issue 而不丢失错误消息?

怎样才能抑制 /etc/issue 而不丢失错误消息?

是否可以告诉 ssh 客户端/etc/issue在连接到远程主机时不要打印到 stdout 的连接,而是打印出任何其他诊断(例如错误)消息?

使用ssh -q或使用LogLevel quietin~/.ssh/config都会抑制/etc/issue打印,但也会关闭错误消息。我也尝试过touching - 这会停止打印,但不会影响。~/.hushlogin/etc/motd/etc/issue

最明显的解决方案就是删除/etc/issue,但公司政策规定文件必须带有关于未经授权访问的严重警告。这是没有商量余地的。不幸的是,我有一堆通过 ssh 在相当多的主机上运行的脚本,日志文件 a) 非常大,b) 充满了法律术语。由于相当多的东西都是无人看管的,我不想丢失任何打印的错误消息。

答案1

是的   添加包含以下内容的文件~/.ssh/config

LogLevel ERROR

/etc/issueOpenSSH 显示来自远程服务器的内容。该参数禁用此显示。当公司远程 Git 存储库出现令人讨厌的安全警告时非常有用。

ssh config手册页说:

LogLevel

给出从 ssh(1) 记录消息时使用的详细程度。可能的值包括:QUIETFATALERRORINFOVERBOSEDEBUG、和。默认值为。 和DEBUG1是等效的。 和分别指定更高级别的详细输出。DEBUG2DEBUG3INFODEBUGDEBUG1DEBUG2DEBUG3


额外技巧   还添加在您的~/.ssh/config

Host *
#    StrictHostKeyChecking no
     StrictHostKeyChecking accept-new

这可以防止出现另一条烦人的消息。连接到新主机时,以下安全问题会阻止正在进行的连接。上述技巧始终假设yes。然而在实践中,您总是回答yes,不是吗?

The authenticity of host 'newhostname (11.222.33.44)' can't be established.
RSA key fingerprint is aa:bb:cc:dd:ee:ff:11:22:33:44:55:66:77:88:99:00.
Are you sure you want to continue connecting (yes/no)?

编辑:正如克里斯·亚当斯使用StrictHostKeyChecking no可能允许中间人攻击,更好地使用StrictHostKeyChecking accept-new解释https://man.openbsd.org/ssh_config.5#StrictHostKeyChecking

答案2

/etc/issue当我通过 ssh 登录时(无论是使用 shell 还是执行远程命令),我的 OS X localhost 或 Ubuntu 服务器均不打印,因此我无法重现您的问题。我将凭记忆尝试一下。

如果您不介意建立两个连接,您可以这样做:

num_lines="$(ssh yourhost 'cat /etc/issue' | wc -l)";
ssh yourhost 'your real command here' | tail +$(($num_lines / 2 + 1));

第一个 ssh 命令将导致/etc/issue被打印两次(一次由系统打印,一次由 打印cat),因此行数将是 的两倍/etc/issue。第二个命令的输出将只显示该行数加上一的输出。

答案3

如果您的日志将在一个文件中附加一堆会话,您可以让您的脚本echo START LOGGING在运行任何其他命令之前,然后echo END LOGGING在断开连接之前执行类似操作,然后使用一个简单的 shell 脚本(使用 sed 或 awk)删除 END 和 START 之间的文件的所有内容(即每次登录前的样板)。

编辑:

现在我看到您没有记录日志,而是在窗口中查找消息 - 我建议创建日志并扫描日志,而不是仅仅依赖终端窗口输出 - 这更加灵活,并且允许在需要时参考以前会话中的错误。

答案4

不。

当主机发回文本行时,SSH 客户端如何知道哪些行来自主机的 /etc/issue,哪些是更有趣的消息?它不能。

相关内容