如何自动化填充known_hosts和authorized_keys文件

37次阅读
没有评论

问题描述

在自动化部署过程中遇到了一个问题,他想要自动填充known_hostsauthorized_keys文件。他正在使用Vagrant创建一个多机环境,其中包括多个Ubuntu 18.04虚拟机。他希望能够通过SSH使用公钥登录到这些虚拟机。他已经编写了一个脚本来手动完成这个过程,但是需要手动输入一些信息。他想知道如何在Vagrantfile中自动化这个过程,并且在将来迁移到裸机服务器时,如何遵循最佳实践以防止中间人攻击。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

自动化填充known_hosts文件

要自动填充known_hosts文件,可以使用ssh-keyscan命令。该命令可以扫描指定主机的公钥,并将其添加到known_hosts文件中。以下是一个示例脚本,可以在Vagrantfile中使用:

#!/bin/bash
# 扫描并添加主机公钥到known_hosts文件
ssh-keyscan node1 >> ~/.ssh/known_hosts
ssh-keyscan node2 >> ~/.ssh/known_hosts
ssh-keyscan node3 >> ~/.ssh/known_hosts

在上面的示例中,我们使用ssh-keyscan命令扫描每个主机的公钥,并将其添加到known_hosts文件中。你可以根据你的实际情况添加更多的主机。

自动化填充authorized_keys文件

要自动填充authorized_keys文件,可以使用ssh-copy-id命令。该命令可以将指定公钥添加到远程主机的authorized_keys文件中。以下是一个示例脚本,可以在Vagrantfile中使用:

#!/bin/bash
# 添加公钥到远程主机的authorized_keys文件
ssh-copy-id -i ~/.ssh/id_rsa.pub node1
ssh-copy-id -i ~/.ssh/id_rsa.pub node2
ssh-copy-id -i ~/.ssh/id_rsa.pub node3

在上面的示例中,我们使用ssh-copy-id命令将本地的公钥添加到每个远程主机的authorized_keys文件中。你可以根据你的实际情况添加更多的主机。

防止中间人攻击的最佳实践

当你迁移到裸机服务器时,为了防止中间人攻击,你可以采取以下最佳实践:
1. 使用SSH密钥对进行身份验证:使用SSH密钥对进行身份验证比使用密码更安全。确保为每个用户创建一个独立的密钥对,并将公钥添加到每个用户的authorized_keys文件中。
2. 禁用密码身份验证:禁用密码身份验证可以防止通过密码进行的身份验证尝试。在SSH服务器的配置文件中,将PasswordAuthentication设置为no
3. 使用SSH代理:使用SSH代理可以帮助你管理多个SSH密钥对,并提供单点登录功能。你可以使用ssh-agent命令来启动SSH代理,并使用ssh-add命令将密钥添加到代理中。
4. 定期更换密钥对:定期更换密钥对可以增加安全性。建议每隔一段时间生成新的密钥对,并将新的公钥添加到远程主机的authorized_keys文件中。
请注意,以上最佳实践只是一些建议,你可以根据你的实际需求和安全策略进行调整。

正文完