是否可以告诉 ssh 客户端/etc/issue
在连接到远程主机时不要打印到 stdout 的连接,而是打印出任何其他诊断(例如错误)消息?
使用ssh -q
或使用LogLevel quiet
in~/.ssh/config
都会抑制/etc/issue
打印,但也会关闭错误消息。我也尝试过touch
ing - 这会停止打印,但不会影响。~/.hushlogin
/etc/motd
/etc/issue
最明显的解决方案就是删除/etc/issue
,但公司政策规定文件必须带有关于未经授权访问的严重警告。这是没有商量余地的。不幸的是,我有一堆通过 ssh 在相当多的主机上运行的脚本,日志文件 a) 非常大,b) 充满了法律术语。由于相当多的东西都是无人看管的,我不想丢失任何打印的错误消息。
答案1
是的 添加包含以下内容的文件~/.ssh/config
:
LogLevel ERROR
/etc/issue
OpenSSH 显示来自远程服务器的内容。该参数禁用此显示。当公司远程 Git 存储库出现令人讨厌的安全警告时非常有用。
LogLevel
给出从 ssh(1) 记录消息时使用的详细程度。可能的值包括:
QUIET
、FATAL
、ERROR
、INFO
、VERBOSE
、DEBUG
、和。默认值为。 和DEBUG1
是等效的。 和分别指定更高级别的详细输出。DEBUG2
DEBUG3
INFO
DEBUG
DEBUG1
DEBUG2
DEBUG3
额外技巧 还添加在您的~/.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,哪些是更有趣的消息?它不能。