You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Linux服务器以正常连接GitHub仓库拉取代码?

核心故障原因

你执行sudo git pull origin master报权限错误的核心原因非常明确:sudo执行命令时会切换身份到root用户,此时SSH认证读取的是root用户家目录下的密钥配置,和你当前登录的非root用户~/.ssh目录下的文件完全无关。你之前给GitHub账号添加的是当前普通用户的密钥,root用户读不到,自然会认证失败。
另外两个你之前操作没生效的常见原因:

  • 你之前添加到GitHub的是id_rsa私钥文件内容,GitHub只接受.pub后缀的公钥用于SSH认证,上传私钥完全无效。
  • 本地仓库的远程地址配置成了HTTPS格式,根本没走SSH认证通道。

把部署服务器的SSH密钥加到个人GitHub账号可以临时解决问题,但不属于规范操作——后续如果你的账号权限被调整、人员离职,部署流程会直接失效,长期使用推荐配置仓库级的部署密钥。

操作步骤(优先选无sudo方案,安全且易维护)

方案一:普通用户直接拉取(推荐)

不需要用sudo执行git操作,只要给当前用户配置代码目录权限、正确设置SSH密钥即可:

  1. 修复代码目录权限
    如果你之前用sudo拉过代码,代码目录的属主会是root,普通用户没有写入权限,执行以下命令修复(把/your/site/path替换成实际的网站代码根目录路径):
    sudo chown -R $USER:$USER /your/site/path
    
  2. 配置正确的SSH公钥
    • 执行cat ~/.ssh/id_rsa.pub,复制输出的全部公钥内容(如果文件不存在,执行ssh-keygen -t ed25519 -C "server-deploy"一路回车生成即可)
    • 打开GitHub对应仓库的设置页,找到「Deploy keys」选项,添加刚才复制的公钥,仅拉取代码不需要勾选写权限;如果临时应急,也可以把公钥加到你个人GitHub账号的SSH密钥列表中,确保你的账号有仓库访问权限即可。
  3. 验证配置有效性
    • 先验证SSH连通性,执行:
      ssh -T git@github.com
      
      如果返回类似Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.的提示,说明SSH认证已经正常。
    • 检查仓库远程地址格式,在代码目录执行git remote -v,如果返回的地址是https://github.com/xxx/xxx.git开头,说明是HTTPS地址,执行命令替换为SSH地址:
      git remote set-url origin git@github.com:仓库所属用户名/仓库名.git
      
  4. 直接在代码目录执行git pull origin master即可,不需要加sudo。

方案二:必须使用sudo执行的场景(不推荐)

如果因为特殊环境限制必须加sudo执行git命令,就给root用户单独配置SSH密钥:

  1. 执行sudo su切换到root用户
  2. 执行ssh-keygen -t ed25519 -C "root-deploy-key"一路回车生成root用户的SSH密钥
  3. 执行cat ~/.ssh/id_ed25519.pub复制公钥,按照方案一的步骤添加到GitHub对应仓库的部署密钥中
  4. 执行exit退回普通用户,再执行sudo git pull origin master即可正常拉取。
注意事项
  • 绝对不要把不带.pub后缀的私钥文件内容上传到任何平台,私钥仅保存在服务器本地即可,泄露会有严重安全风险。
  • 每次配完密钥先跑ssh -T git@github.com验证连通性,不要直接执行git pull,能快速定位是密钥问题还是git配置问题。

内容的提问来源于stack exchange,提问作者Samson Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 16:27:26