使用scp向EC2复制Ansible playbook时报私钥权限错误如何解决?
问题根因
你遇到的报错有两个核心原因:
- 本地默认SSH私钥文件
~/.ssh/id_rsa权限为755,不符合SSH的安全要求,被程序直接忽略 - 你的scp命令未显式指定使用
ansible-benchmark.pem密钥,也未指定EC2实例的登录用户名,默认走的认证配置和EC2的要求不匹配
解决方案
步骤1:修复本地SSH目录及默认私钥权限
SSH对本地密钥相关的目录和文件权限要求非常严格,目录权限不能超过700,私钥文件权限不能超过600,否则会直接拒绝加载对应密钥,执行以下命令修复:
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa
步骤2:修改scp命令,显式指定密钥和EC2登录用户名
修改你的传输命令,增加-i参数指定密钥路径,同时补充EC2的登录用户名:
scp -i ~/.ssh/id-rsa/ansible-benchmark.pem /Users/mohammedkhot/Documents/terraform-consul/cis-playbook/main.yaml ec2-user@ec2-18-170-61-4.eu-west-2.compute.amazonaws.com:/etc/ansible
注意两点:
- 必须加
-i参数指定你要使用的私钥路径,否则SSH默认只会读取~/.ssh/id_rsa文件 - 要确认EC2实例的登录用户名:Amazon Linux默认用户为
ec2-user,Ubuntu默认用户为ubuntu,CentOS默认用户为centos。如果你的实例不是Amazon Linux,替换命令中的ec2-user为对应系统的默认用户名即可。
步骤3:目录写入报错补充处理
如果执行上述命令后,公钥认证成功但出现无法写入/etc/ansible目录的报错,说明当前登录用户没有该目录的写入权限,可以先把文件传到用户家目录,再登录实例移动到目标路径:
# 第一步:先传文件到EC2用户的家目录 scp -i ~/.ssh/id-rsa/ansible-benchmark.pem /Users/mohammedkhot/Documents/terraform-consul/cis-playbook/main.yaml ec2-user@ec2-18-170-61-4.eu-west-2.compute.amazonaws.com:~/ # 第二步:SSH登录EC2,移动文件到目标目录 ssh -i ~/.ssh/id-rsa/ansible-benchmark.pem ec2-user@ec2-18-170-61-4.eu-west-2.compute.amazonaws.com sudo mv ~/main.yaml /etc/ansible/
内容的提问来源于stack exchange,提问作者MoArafat
相关产品推荐
相关产品推荐

