0

0

composer如何通过SSH Key安装私有包_composer配置SSH权限详细教程【详解】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-01-17 12:11:41

|

475人浏览过

|

来源于php中文网

原创

Composer 通过 SSH Key 安装私有包的本质是确保 Git 能用本地私钥拉取代码,关键在于 Git URL 必须为 SSH 格式(如 git@gitlab.example.com:group/repo.git)、SSH 密钥已正确生成并加载、ssh -T git@gitlab.example.com 能成功验证,而非修改 composer.json 或全局 Git 用户配置。

composer如何通过ssh key安装私有包_composer配置ssh权限详细教程【详解】

Composer 通过 SSH Key 安装私有包,本质是让 Git 能用你的私钥拉取代码,而不是让 Composer 本身“登录”。关键不在 composer.json 里写密码或 token,而在本地 Git 的 SSH 配置是否生效、是否匹配仓库地址。

确认私有包 URL 是 SSH 格式

Composer 只会在 Git URL 是 SSH 形式时走 SSH 协议。HTTPS 地址(如 https://gitlab.example.com/group/repo.git)永远走 HTTPS 认证,哪怕你配了 SSH Key 也没用。

必须把 repositories 中的 URL 改成类似这样:

{
    "type": "vcs",
    "url": "git@gitlab.example.com:group/repo.git"
}

常见错误:

  • 混用协议:写成 ssh://git@gitlab.example.com/group/repo.git —— 多数 Git 服务(GitLab/GitHub)不支持该格式,会连接失败
  • 漏掉用户名 git@:只写 gitlab.example.com:group/repo.git,Git 无法识别为 SSH 地址
  • 用了别名但没配置 ~/.ssh/config:比如写了 git@mygit,却没在 SSH 配置里定义 Host mygit

生成并加载正确的 SSH Key

Composer 不管理密钥,它调用 git clone,而 git 依赖系统 SSH Agent 或 ~/.ssh/config。所以重点是让 ssh -T git@gitlab.example.com 能通。

操作步骤:

  • ssh-keygen -t ed25519 -C "your_email@example.com" 生成新密钥(推荐 ed25519,比 rsa 更安全)
  • 确保公钥已添加到 Git 托管平台(GitHub/GitLab/Gitee)的 SSH Keys 设置页
  • 运行 eval "$(ssh-agent -s)" 启动 agent(Linux/macOS),再用 ssh-add ~/.ssh/id_ed25519 加载私钥
  • Windows 用户若用 Git Bash,需确认 OpenSSH Authentication Agent 服务已启动,并执行 ssh-add

验证命令:ssh -T git@gitlab.example.com。成功返回类似 Welcome to GitLab, @username! 才算真正就绪。

绕过 host key 检查(仅限内网/测试环境)

如果私有 Git 服务器用的是自签名域名或内网 IP(如 git.internal),首次连接常因未知 host key 失败,报错类似:

Evoker
Evoker

一站式AI创作平台

下载

The authenticity of host 'git.internal (10.0.1.5)' can't be established.

这不是权限问题,而是 SSH 拒绝未验证的 host。临时解决(不推荐线上):

# 在 ~/.ssh/config 中追加
Host git.internal
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

更稳妥的做法是手动执行一次 ssh git@git.internal,接受 host key,它会自动存入 ~/.ssh/known_hosts。之后 Composer 就能静默通过。

避免全局 Git 用户邮箱污染提交记录

很多人为了“让 SSH 生效”在全局设了 git config --global user.email,结果所有本地 commit 都带上错误邮箱。其实完全没必要。

SSH 认证和 Git 提交身份是两回事:

  • SSH 只认密钥和服务器端绑定的账号(即你添加公钥时用的 Git 平台账号)
  • commit 作者信息由 git config user.name/user.email 控制,且应按项目设置(--local),而非 --global

如果你发现 composer install 卡住或报 Permission denied (publickey),优先检查 ssh -T 是否通、URL 是否为 git@... 格式、私钥是否被 ssh-agent 正确加载——这些点比改 Composer 配置重要得多。

相关专题

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

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

149

2023.12.25

json数据格式
json数据格式

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

412

2023.08.07

json是什么
json是什么

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

533

2023.08.23

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

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

309

2023.10.13

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

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

74

2025.09.10

登录token无效
登录token无效

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

6093

2023.09.14

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

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

805

2023.09.14

token怎么获取
token怎么获取

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

1062

2023.12.21

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

40

2026.01.16

热门下载

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

精品课程

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

共48课时 | 7.3万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

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

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