0

0

Composer如何在私有Git仓库中拉取包?(SSH密钥配置)

尼克

尼克

发布时间:2026-02-27 04:09:33

|

404人浏览过

|

来源于php中文网

原创

composer install 报“permission denied (publickey)”是因为 git 通过 ssh 拉取私有仓库失败,需确保 ssh-agent 已加载密钥、~/.ssh/config 配置正确、composer.json 中 url 使用 git@ 格式,且私有包仓库已在根项目 repositories 中显式声明。

composer如何在私有git仓库中拉取包?(ssh密钥配置)

为什么 composer install 报错 “Permission denied (publickey)”

私有 Git 仓库(如 GitHub/GitLab 私有项目)作为 Composer 包源时,Composer 默认走 SSH 协议拉取,但本地没配好 SSH 密钥或代理就会卡在这一步。错误通常长这样:

Cloning into '/path/to/vendor/vendorname/pkg'... Permission denied (publickey). fatal: Could not read from remote repository.</p>
<p>关键不是 Composer 本身的问题,而是 Git 在后台执行 <code>git clone
时失败了。Composer 不会帮你管理 SSH 凭据,它只负责调用 Git。

  • 确认你手动执行 git clone git@github.com:user/private-pkg.git 能成功 —— 这是第一道验证
  • 检查 ssh -T git@github.com 是否返回 “Hi user! You've successfully authenticated…”
  • 如果用的是 GitLab 或自建 Gitea,把域名换成对应地址,比如 git@gitlab.example.com
  • 别指望 composer config --global github-oauth.github.com token 能解决 SSH 场景 —— 那只对 HTTPS + OAuth 有效

如何让 Composer 正确走 SSH 并复用已有密钥

Composer 本身不处理密钥加载逻辑,它完全依赖系统级的 SSH 配置。只要 git 命令能走 SSH 拉代码,Composer 就能跟着走。

天工大模型
天工大模型

中国首个对标ChatGPT的双千亿级大语言模型

下载
  • 确保密钥已添加进 ssh-agent:ssh-add -l 能列出密钥才算生效;如果没列出来,运行 ssh-add ~/.ssh/id_rsa(路径按你实际密钥位置调整)
  • 检查 ~/.ssh/config 是否存在冲突配置,比如某段写了 IdentitiesOnly yes 但没配 IdentityFile,会导致认证跳过
  • 如果公司强制走跳板机或非标准端口,必须在 ~/.ssh/config 中为对应 Host 显式声明 PortProxyJump,否则 Composer 启动的子进程看不到这些
  • Windows 用户注意:Git for Windows 自带的 OpenSSH 和 PowerShell 的 OpenSSH 可能不是同一套,ssh-add 加的密钥不一定被 Git Bash 识别 —— 建议统一用 Git Bash 环境操作

composer.json 里怎么写私有包才不会绕到 HTTPS

很多人误以为改 repositories 类型就能控制协议,其实真正起作用的是 url 字段的协议前缀。Composer 会原样传给 Git。

  • 写成 "url": "git@github.com:user/private-pkg.git" → 走 SSH
  • 写成 "url": "https://github.com/user/private-pkg.git" → 走 HTTPS,此时需要另配 git config --global credential.helper store 或用 token
  • 别写成 "url": "github.com:user/private-pkg.git"(漏了 git@)—— Git 会当成本地路径处理,报错 fatal: repository 'github.com:user/private-pkg.git' does not exist
  • 如果私有包用了子模块,且子模块 URL 也是 SSH,记得在父仓库的 .gitmodules 里也用 git@ 格式,否则 composer installgit submodule update 仍会失败

CI/CD 环境下 SSH 密钥怎么安全注入

本地能跑不代表 CI 能跑。CI 环境没有交互式终端、没有持久 ssh-agent、甚至默认禁用 SSH Agent Forwarding,得手动“喂”密钥。

  • GitHub Actions:用 webfactory/ssh-agent Action 注入密钥,再确保后续步骤的 shell: bash 继承环境变量(尤其是 SSH_AUTH_SOCK
  • GitLab CI:把密钥存为 CI/CD Variables(类型选 File),然后在 job 中用 mkdir -p ~/.ssh && cp "$SSH_PRIVATE_KEY" ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa
  • 避免在 composer.json 里硬编码 token 或密码 —— 不仅不安全,还会让 Composer 缓存污染,不同环境拉错版本
  • 测试时加个 before_script:运行 ssh -o ConnectTimeout=5 -T git@github.com || echo "SSH failed",比等 composer install 卡住再排查快得多

最常被忽略的一点:私有包的 composer.json 里如果写了 "type": "vcs",但没在根项目的 repositories 中显式注册该仓库,Composer 会直接跳过解析,连 SSH 连接机会都没有 —— 它根本不知道该去哪找这个包。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

160

2023.12.25

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

449

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

325

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6462

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

838

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1087

2023.12.21

Golang 实际项目案例:从需求到上线
Golang 实际项目案例:从需求到上线

《Golang 实际项目案例:从需求到上线》以真实业务场景为主线,完整覆盖需求分析、架构设计、模块拆分、编码实现、性能优化与部署上线全过程,强调工程规范与实践决策,帮助开发者打通从技术实现到系统交付的关键路径,提升独立完成 Go 项目的综合能力。

1

2026.02.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 3.9万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.6万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 94人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号