将公钥添加到known_hosts文件

48

我正在尝试将来自A服务器的公钥复制到B服务器的known_hosts文件中。它们都是Linux服务器。最初,我考虑打开公钥文件并将其内容复制到known_hosts文件中,但我怀疑那不是正确的方法。有人知道正确的方法吗?

我的公钥格式为ssh-rsa AADGD...

有人能帮忙吗?

谢谢!

4个回答

27

我几天前在SuperUser上回答了一个几乎相似的问题。重要部分如下:

  • 格式不同
  • 每个服务器上都有不同类型的主机密钥(确保您粘贴的是实际使用的密钥)
  • ssh-keyscan可以为您创建格式

否则,只需在密钥前加上服务器IP地址(逗号后面也可以添加主机名),删除行末的注释,您就可以了。格式如下:

11.22.33.44 ssh-rsa AADGD...

还有一点需要注意,如果你使用HashKnownHosts yes(Debian和Ubuntu默认是这样的),你需要重新hash你的known_hosts文件,例如:

重新hash known_hosts文件:

ssh-keygen -H -f ~/.ssh/known_hosts
返回结果为:

还有一点需要注意,如果你使用HashKnownHosts yes(Debian和Ubuntu默认是这样的),你需要重新hash你的known_hosts文件,例如:

重新hash known_hosts文件:

ssh-keygen -H -f ~/.ssh/known_hosts
ssh-keygen -Hf ~/.ssh/known_hosts

谢谢!所以确认一下,我应该编辑known_hosts文件,在文件末尾添加server_ip_address ssh-rsa AADGD...是吗? - Trung Tran
就像我写的那样,它应该能够完成工作。 - Jakuje
有一个问题,我应该使用特定的IP吗?我输入了/sbin/ifconfig -a并得到了大约5种不同类型的IP地址。注意,这里的“gotcha”是指“捕获到了”,表示发现了一个问题或陷阱。 - Trung Tran
你所描述的问题是,当从B服务器连接到A服务器时要使用的IP地址。如果有不同,请检查man sshd末尾的文件和术语。 - Jakuje

18

刚刚遇到这个问题,以下是我处理的方法:

随着时间的推移,通过机械复制文件

ssh-keyscan server-name >> ~/.ssh/known_hosts

给我在.ssh/known_hosts中重复的条目。

其他手动方法需要我创建.ssh目录,如果不存在等。

我决定让ssh自己处理:

ssh -o StrictHostKeyChecking=no server-name ls

-o StrictHostKeyChecking=no 选项自动回答“是”

The authenticity of host 'server-name (12.345.678.900)' can't be established.
RSA key fingerprint is XXXXXXX.
Are you sure you want to continue connecting (yes/no)?

提示(在此处插入有关连接到未知计算机的所有安全注意事项)。

ls命令只是一个无用的命令,执行完后会强制SSH断开连接。您可以更改它为任何无用的命令。

ssh将负责创建.ssh目录(如果需要),添加密钥的唯一副本等操作。

平台:macOS 10.14


如果我在A上没有公钥怎么办?会没有ssh连接吗?还是在A上创建密钥,然后将其推送到“known_hosts”中? - Timo
@Timo 如果你在远程主机上没有公钥,系统会提示你输入密码。如果登录失败,我认为本地的known_hosts不会被更新,但我没有测试过。 - JS.

11
这是我的做法。
1. 在主机服务器上生成密钥。使用以下命令。
*ssh-keyscan -t rsa full-server-name

Command line and output

现在复制图片中高亮部分,并将此密钥附加到源服务器上的“known_host”文件中。当然,对于不同的环境,该文件的位置可能是不同的。

1
他们提供了一个密钥,因此可能希望根据该密钥提供解决方案,而不是扫描服务器的密钥。 - AdamC

6
假设您有一个名为publickey.pub的文件,请按照以下步骤操作:
  1. 公钥.pub通过scp命令复制到您想要的服务器上。
  2. 对于AWS EC2 ubuntu实例,请执行以下步骤:
sudo /bin/bash -c "cat /$USER_PATH/public_key.pub  >> $USER_PATH/.ssh/authorized_keys"
  1. 对于 known_hosts,运行如下命令:
sudo /bin/bash -c "cat /$USER_PATH/public_key.pub  >> $USER_PATH/.ssh/known_hosts"
  1. 使用ssh测试连接。

注意:确保检查您的公钥格式。我到目前为止看到的公钥都以加密算法开头,例如ssh-RSA


这样做是不起作用的,如果你将.pub文件附加到客户端的known_hosts上,它会被忽略。 - Deim0s
可能不是一个 AWS EC2 实例 Ubuntu 18.04。 - Andre Leon Rangel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接