You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 10下VSCode+WSL2+Docker环境Git+SSH密钥配置问题求助

解决Docker容器内Git+SSH密钥权限与代理转发问题

我之前在WSL2+Docker环境里也碰到过一模一样的问题,折腾了好几天才搞定,给你几个亲测有效的方案:

方案一:修复容器内.ssh目录的权限问题

问题根源很明确:WSL里你的用户UID是1000,映射到容器的/root/.ssh后,目录和文件的所有者变成了1000:1000,但SSH要求这些文件必须属于当前用户(容器里是root,UID=0),且权限严格是目录700、文件600。

你可以在Docker Compose里通过entrypoint来自动修正权限,不用手动操作:

services:
  your-app-service:
    volumes:
      - ~/.ssh:/root/.ssh
    # 替换下面的"npm start"为你容器原本的启动命令
    entrypoint: ["sh", "-c", "chown -R root:root /root/.ssh && chmod 700 /root/.ssh && chmod 600 /root/.ssh/* && exec npm start"]

这个命令会在启动容器应用之前,先把/root/.ssh的所有者改成root,同时修正权限,完全符合SSH的要求。

如果觉得每次启动都执行chown麻烦,也可以在WSL里复制一份密钥专门给容器用:

# 在WSL终端执行
sudo cp ~/.ssh/id_rsa /tmp/container_ssh_key
sudo chown root:root /tmp/container_ssh_key
sudo chmod 600 /tmp/container_ssh_key

然后在docker-compose.yml里只映射这个文件:

volumes:
  - /tmp/container_ssh_key:/root/.ssh/id_rsa

方案二:用SSH代理转发绕过权限问题(推荐)

挂载整个.ssh目录容易踩权限坑,更简洁的方法是让容器直接用WSL里的ssh-agent,这样根本不需要挂载密钥文件。之前你遇到GitHub权限拒绝,大概率是代理转发的配置没做全:

  1. 先确保WSL里的ssh-agent在运行,并且加载了你的密钥:
# 在WSL终端执行
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
# 测试是否能连接GitHub
ssh -T git@github.com

如果这里能成功,说明WSL的代理没问题。

  1. 在Docker Compose里挂载SSH_AUTH_SOCK,并设置环境变量:
services:
  your-app-service:
    environment:
      - SSH_AUTH_SOCK=/ssh-agent
    volumes:
      - ${SSH_AUTH_SOCK}:/ssh-agent

这样容器里的Git会自动使用WSL的ssh-agent来处理密钥,完全避开权限问题。

如果还是提示权限拒绝,检查容器里的ssh配置:

# 进入容器终端执行
echo "ForwardAgent yes" >> /etc/ssh/ssh_config

或者在执行Git命令时临时指定:

GIT_SSH_COMMAND="ssh -o ForwardAgent=yes" git clone git@github.com:your-repo.git

方案三:Docker Secrets(适合生产/CI场景)

如果是在生产环境或者CI/CD流水线里,不建议直接挂载本地密钥,用Docker Secrets更安全:

services:
  your-app-service:
    environment:
      - GIT_SSH_COMMAND="ssh -i /run/secrets/ssh_key -o StrictHostKeyChecking=no"
    secrets:
      - ssh_key

secrets:
  ssh_key:
    file: ~/.ssh/id_rsa

Docker会自动把密钥挂载到/run/secrets/ssh_key,权限自动设为600,所有者是root,完美符合SSH要求。

内容的提问来源于stack exchange,提问作者Matt Woodward

火山引擎 最新活动