每次我使用git与遥控器交互时,比如拉或推时,我都会看到以下消息:
警告:永久添加'…' (RSA)到已知主机列表。
如何防止显示这个烦人的消息?这只是一个烦恼——一切都很正常。
每次我使用git与遥控器交互时,比如拉或推时,我都会看到以下消息:
警告:永久添加'…' (RSA)到已知主机列表。
如何防止显示这个烦人的消息?这只是一个烦恼——一切都很正常。
当前回答
创建一个~/。Ssh /config文件并插入行:
UserKnownHostsFile ~/.ssh/known_hosts
然后,您将在下次访问Github时看到该消息,但在此之后,您将不再看到它,因为主机已添加到known_hosts文件。这可以修复问题,而不仅仅是隐藏日志消息。
这个问题困扰了我很长时间。出现此问题是因为为Windows编译的OpenSSH客户端没有检查~/.ssh/known_hosts中的known_hosts文件
SSH -vvv git@github.com
debug3: check_host_in_hostfile: filename /dev/null
debug3: check_host_in_hostfile: filename /etc/ssh/ssh_known_hosts
debug3: check_host_in_hostfile: filename /dev/null
debug3: check_host_in_hostfile: filename /etc/ssh/ssh_known_hosts
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
其他回答
就我所知,你提到的这个问题没有明确的解决办法。 之前建议的/dev/null重定向仍然会显示警告,它只是通过将输出重定向到/dev/null来禁用存储远程密钥的安全特性 所以ssh仍然会认为它写了一些实际上被丢弃的东西。
据我所知,唯一的选择是捕获消息并将其从标准输出中删除。
ssh/scp..... 2>&1 | grep -v "^Warning: Permanently added"
这是一个完整的例子,你可以使用包装器隐藏这样的警告:
#!/bin/bash
remove="^Warning: Permanently added" # message to remove from output
cmd=${0##*/}
case $cmd in
ssh)
binary=/usr/bin/ssh
;;
*)
echo "unsupported binary ($0)"
exit
;;
esac
$binary "$@" 2>&1 | grep -v "$remove"
要安装它,您所需要做的就是为您希望修改的实际命令添加/修改“case”语句。(ssh, scp, git等)。 “ssh”意味着脚本必须命名为“ssh”(或者到脚本的链接命名为ssh)。 binary=/full/path是脚本应该包装的二进制文件的路径。 然后将带有您选择的名称的脚本放到/bin或其他地方。
该脚本还可以在$binary变量中使用-o "UserKnownHostsFile=/dev/null",这比将这样的安全风险放入全局ssh配置中要好得多,这会影响所有ssh会话,而不仅仅是那些您想要抑制消息的会话。
缺点: 这有点开销,不是一个完美的解决方案,并将stderr移动到stdout,这可能不是在所有情况下都很好。 但是它将消除您不希望看到的任何类型的警告消息,并且您可以使用一个脚本来包装您想要的所有二进制文件(通过使用文件系统链接)
在ssh配置文件($HOME/.ssh/config)中添加以下行:
LogLevel=quiet
如果从命令行运行ssh,在命令字符串中添加以下选项:
-o LogLevel=quiet
例如,下面打印在machine.example.org上安装的gcc版本(没有警告):
ssh -o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no \
-o LogLevel=quiet \
-i identity_file \
machine.example.org \
gcc -dumpversion
在我的例子中,这是因为设置服务器的管理员在~/.ssh/config中设置了这些选项
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
在大多数情况下,不使用~/。ssh / known_hosts文件中。但是对于企业gitlab回购,每当它给出“警告:永久添加…”到已知的宿主名单。”
我的解决方案是注释掉UserKnownHostsFile /dev/null行,这允许创建~/.ssh/known_hosts。在那之后,它没有再给出任何警告。
在known_hosts中也可能有旧的/无效的条目。
# find entry in ~/.ssh/known_hosts
ssh-keygen -F <hostname>
# delete entry in ~/.ssh/known_hosts
ssh-keygen -R <hostname>
这主要意味着该主机的键发生了变化~/。ssh/known_hosts,它不会自动更新它。因此,每当您收到此警告消息时。
这种情况经常发生在连接到重新创建的虚拟机时,它会使用相同的IP地址更改密钥
解决方案
如果只有一个条目,那么可以删除~/。Ssh /known_hosts文件,并且在第一次连接之后,密钥将在那里,之后没有警告消息。
如果有多个条目,则可以使用下面的命令删除
$ ssh-keygen -R <hostname>
这对我来说很有效
我的情况下,我只得到ssh警告时使用Gridengine qrsh远程shell登录。然而,正常的ssh会像预期的那样工作(第一次发出警告,然后在随后的时间里保持安静)。
我的解决方案是手动填充~/。ssh/known_hosts与Gridengine可以选择的所有可能的服务器名称(使用qhost列出服务器):
for p in server1 server2 server3 server4; do
ssh-keyscan -H ${p}.company.com;
ssh-keyscan -H $(getent hosts $p | perl -lane 'print $F[0]');
done >> ~/.ssh/known_hosts
背景:
Gridengine is a job scheduler which can use ssh to select the least loaded server. The reason for the warning is that qrsh seem to always specify a non-standard port for doing the ssh connection, causing known_hosts to be updated with an entry also containing a port number. Next time when qrsh selects the same server there would be a new port-number and known_hosts would get updated with a new port-specific entry. The reason for also adding the raw host IP address is that some hosts used ecdsa-sha2-nistp521. If a raw IP entry is not added I would get the warning:
ECDSA host key for IP address '10.1.2.3' not in list of known hosts.