在本地 LAN 上禁用“永久添加 <host> ...”警告

jww*_*jww 40 ssh openssh

我有以下内容ssh_config可以连接到本地 LAN 上的机器和 VM 中的机器:

Host 172.16.*.*
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
Run Code Online (Sandbox Code Playgroud)

但是,每次我连接它都会产生警告:

$ ssh jdoe@172.16.4.11
Warning: Permanently added '172.16.4.11' (ECDSA) to the list of known hosts.
Enter passphrase for key '/Users/jdoe/.ssh/id_ed25519': 
Run Code Online (Sandbox Code Playgroud)

我正在使用 OpenSSH 7.1。如何在本地 LAN 的每个连接上禁用警告?

Tak*_*ual 60

将以下内容附加到您的 SSH 配置文件中:

LogLevel ERROR
Run Code Online (Sandbox Code Playgroud)

或者附加-o LogLevel=ERROR到 ssh 命令本身。

  • 设置 loglevel=error 的一点警告:这样做可能会丢失有价值的失败信息,例如连接超时消息。 (2认同)

Tho*_*key 17

您应该能够通过将 ssh 配置从“信息”的默认日志级别更改为“错误”(下一个级别)来做到这一点。

参考ssh_config手册页:

LogLevel
给出从 ssh(1) 记录消息时使用的详细级别。可能的值是:QUIETFATALERRORINFOVERBOSEDEBUGDEBUG1DEBUG2,和DEBUG3。默认值为INFO. DEBUG并且DEBUG1是等价的。DEBUG2DEBUG3每个指定较高水平的详细输出的。

ssh讲故事的源代码:

    /*
     * Initialize "log" output.  Since we are the client all output
     * actually goes to stderr.
     */
    log_init(av[0], options.log_level == -1 ? SYSLOG_LEVEL_INFO : options.log_level,
        SYSLOG_FACILITY_USER, 1);
Run Code Online (Sandbox Code Playgroud)

以及 的定义log_init

void
log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr)
{
Run Code Online (Sandbox Code Playgroud)

即,所有“日志”消息都转到标准错误,您只能调整获得的数量。你不想要的那个恰好在这个INFO级别。


小智 7

In short, run ssh with the -q flag to disable warnings/diagnostics (but not errors).

  • `-q` 会做的比你预想的要多。它抑制了非常有用的错误消息。示例:`ssh -q not-existing-host` 不会打印一条错误消息。这个命令只是默默地失败了。相反,`ssh -o LogLevel=error not-existing-host` 将打印一个解释:_ssh:无法解析主机名不存在的主机:名称或服务未知_ (10认同)