问题描述
在自动化部署过程中遇到了一个问题,他想要自动填充known_hosts
和authorized_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
文件中。
请注意,以上最佳实践只是一些建议,你可以根据你的实际需求和安全策略进行调整。