Elastic Beanstalk EC2实例SSH无需PEM证书,如何强制启用证书验证
解决Elastic Beanstalk实例强制SSH密钥认证的问题
问题原因
Elastic Beanstalk默认生成的EC2实例中,SSH配置文件/etc/ssh/sshd_config里的PubkeyAuthentication被注释(# PubkeyAuthentication yes),同时可能保留了密码登录权限,导致即使配置了EC2密钥对,仍可不通过证书登录。手动修改仅对当前实例有效,新实例会恢复默认配置。
永久解决方案
通过Elastic Beanstalk的.ebextensions配置文件,让新实例自动应用SSH强制密钥认证的配置,无需手动修改:
- 在应用根目录创建
.ebextensions文件夹(若不存在) - 在该文件夹内创建配置文件,例如
ssh-force-key-auth.config - 将以下配置写入文件:
container_commands: 01_enable_pubkey_auth: command: | sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config 02_disable_password_login: command: | sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config 03_restart_ssh_service: command: service sshd restart
- 01命令:启用公钥认证,取消
PubkeyAuthentication的注释并设为yes - 02命令:禁用密码登录,彻底强制仅通过密钥认证
- 03命令:重启SSH服务使配置生效
- 将包含
.ebextensions文件夹的应用代码重新打包部署到Elastic Beanstalk
验证配置
部署完成后,SSH登录实例:
- 检查
/etc/ssh/sshd_config,确认PubkeyAuthentication yes和PasswordAuthentication no已生效 - 尝试用密码登录,会被拒绝,仅能通过配置的EC2密钥对证书登录
额外说明
你已设置的安全组IP限制(仅允许指定IP访问22端口),与强制密钥认证结合可实现SSH连接的双重防护,进一步提升实例安全性。
内容的提问来源于stack exchange,提问作者cafetera
相关产品推荐
相关产品推荐

