EC2 Linux实例从AWS CodeCommit执行Git Pull权限拒绝问题求助
解决EC2 Linux实例git pull CodeCommit时的权限拒绝问题
核心排查方向
既然新实例和新仓库能正常拉取,说明SSH配置、CodeCommit权限无问题,问题出在现有EC2实例的本地文件/用户上下文上,按以下步骤逐一排查:
1. 确认执行git命令的用户与目录所有者匹配
你已将目录所有者改为ubuntu,但可能执行git的是其他用户(比如root,或部署脚本用sudo运行):
- 查看当前执行命令的用户:
whoami - 查看目录文件的所有者/组:
ls -la /path/to/your/repo - 如果用户不匹配:
- 切换到ubuntu用户执行命令:
sudo -u ubuntu git pull - 或修改部署脚本,确保以ubuntu用户身份运行(避免用sudo,除非必要)
- 切换到ubuntu用户执行命令:
2. 检查文件的ACL权限(常规chmod/chown可能覆盖不了)
部分系统会用ACL额外限制文件权限,执行以下命令排查:
- 查看目标文件的ACL规则:
getfacl /path/to/your/repo/.gitignore getfacl /path/to/your/repo/<to>/<folder>/index.html - 如果存在限制规则,给ubuntu用户添加完整权限:
setfacl -R -m u:ubuntu:rwx /path/to/your/repo - 或者清除所有ACL规则(谨慎操作,确保不会影响其他应用):
setfacl -R -b /path/to/your/repo
3. 检查是否有进程占用目标文件
如果Web服务(如Nginx、Apache)或其他进程正在使用被修改的文件,会导致git无法删除/创建文件:
- 查找占用文件的进程:
lsof | grep "/path/to/your/repo/<to>/<folder>/index.html" - 临时停止占用服务,拉取完成后再重启:
sudo systemctl stop nginx # 替换成你的服务名 git pull sudo systemctl start nginx
4. 修复git仓库的安全目录配置
Git新版本会检查仓库所有者是否与当前用户一致,否则会限制操作:
- 先确保.git目录所有者正确:
sudo chown -R ubuntu:ubuntu /path/to/your/repo/.git - 添加仓库到git安全目录列表:
git config --global --add safe.directory /path/to/your/repo
5. 极端方案:重新克隆仓库(确保仓库本身无问题)
如果上述方法都无效,备份现有修改后重新克隆:
- 备份当前仓库:
mv /path/to/your/repo /path/to/your/repo_backup - 以ubuntu用户身份重新克隆:
sudo -u ubuntu git clone ssh://git-codecommit.us-west-2.amazonaws.com/v1/repos/<my-repo> /path/to/your/repo - 恢复备份中的自定义修改文件(注意不要覆盖.git目录)
内容的提问来源于stack exchange,提问作者Punit sharma
相关产品推荐
相关产品推荐

