每次我使用git与遥控器交互时,比如拉或推时,我都会看到以下消息:

警告:永久添加'…' (RSA)到已知主机列表。

如何防止显示这个烦人的消息?这只是一个烦恼——一切都很正常。


当前回答

要屏蔽ssh的警告消息,可以在~/.ssh/config中添加以下行:

Host *
LogLevel error

这将禁用警告,但不会禁用错误消息。就像~/中的其他设置一样。如果你想要一个更细粒度的控制,你可以在每个主机上配置LogLevel。

其他回答

在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

就我所知,你提到的这个问题没有明确的解决办法。 之前建议的/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密钥

ssh-keygen -t rsa -b 4096 -C "abc@abc.com"

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/bitbucket_rsa

机箱配置文件

crate ~/.ssh/config

加到下面一行。

UserKnownHostsFile ~/.ssh/known_hosts

然后添加pub密钥和克隆您的存储库…做……

这主要意味着该主机的键发生了变化~/。ssh/known_hosts,它不会自动更新它。因此,每当您收到此警告消息时。

这种情况经常发生在连接到重新创建的虚拟机时,它会使用相同的IP地址更改密钥

解决方案

如果只有一个条目,那么可以删除~/。Ssh /known_hosts文件,并且在第一次连接之后,密钥将在那里,之后没有警告消息。

如果有多个条目,则可以使用下面的命令删除

$ ssh-keygen -R <hostname>

这对我来说很有效

在~/中设置LogLevel为ERROR(不是QUIET)。Ssh /config文件,以避免看到这些错误:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR