使用Ansible连接EC2实例失败:Permission denied问题求助
解决Ansible SSH权限拒绝问题(WSL控制节点 → Amazon Linux 2023目标节点)
1. 修复私钥文件权限
SSH对私钥权限要求极为严格,必须设置为仅所有者可读可写,否则会直接拒绝认证。执行以下命令修正:
# 设置私钥权限为600 chmod 600 ~/.ssh/path/to/private/key # 设置.ssh目录权限为700 chmod 700 ~/.ssh
2. 确认ansible.cfg的生效优先级
Ansible读取配置文件有固定顺序,优先级从高到低:
- 命令行
--config参数指定的文件 - 当前工作目录下的
./ansible.cfg - 用户家目录的
~/.ansible.cfg - 系统级的
/etc/ansible/ansible.cfg
你可以执行以下命令查看当前生效的配置路径,确认修改的是正确的文件:
ansible --version
输出中会显示ansible config file的具体路径。
3. 优化Inventory配置写法
把用户名和主机地址拆分,在Inventory中统一配置变量,避免重复且更易维护:
[aws_ec2] ec2-xx-xx-xx-xx.compute-1.amazonaws.com ec2-xx-xx-xx-xx.compute-1.amazonaws.com ec2-xx-xx-xx-xx.compute-1.amazonaws.com [aws_ec2:vars] ansible_user=ec2-user ansible_ssh_private_key_file=~/.ssh/path/to/private/key
4. 命令行临时指定私钥测试
如果配置文件仍不生效,直接在命令行指定私钥,快速排除配置优先级问题:
ansible all -i inventory -m ping --private-key=~/.ssh/path/to/private/key
如果这个命令能成功,说明你之前修改的配置文件没被正确加载。
5. 验证WSL内的SSH连接
确认你是在WSL终端内执行的SSH测试,而非Windows的CMD/PowerShell(WSL和Windows文件系统隔离,路径不通用)。在WSL中执行:
ssh -i ~/.ssh/path/to/private/key ec2-user@ec2-xx-xx-xx-xx.compute-1.amazonaws.com
如果连接失败,说明WSL内的密钥路径错误或未正确复制密钥到WSL的~/.ssh目录。
6. 检查目标节点SSH配置
登录目标节点,确认/etc/ssh/sshd_config的关键配置:
- 确保
PubkeyAuthentication yes(公钥认证已开启) - 确保
AuthorizedKeysFile指向正确的公钥文件路径(默认是.ssh/authorized_keys) - 检查
ec2-user的~/.ssh/authorized_keys文件包含控制节点的公钥,且文件权限为600,目录权限为700。
内容的提问来源于stack exchange,提问作者Dank_backPain
相关产品推荐
相关产品推荐

