答案是SSH连接未通,必须先确保ssh -T git@your-host-alias成功返回welcome信息;否则Composer必然失败,错误常被误读为权限不足或包不存在。

Composer install 拉私有仓库失败,90% 是 SSH 连接根本没走通——不是权限不够,而是 Git 根本没连上目标主机。
ssh -T 测试失败就别往下试了
所有后续问题都建立在 ssh -T git@your-host-alias 能成功返回 welcome 信息的基础上。如果这步卡住,Composer 必然失败,且错误常被误读为“权限不足”或“包不存在”。
- 报
The authenticity of host 'xxx' can't be established:是首次连接未确认 host key,手动执行一次ssh -o StrictHostKeyChecking=no -T git@your-host-alias(仅限可信内网),或把目标服务器的 public key 追加到~/.ssh/known_hosts - 报
Permission denied (publickey):检查~/.ssh/config中的Host名是否与 URL 中的主机名**逐字一致**(比如 URL 是git@10.0.1.5:group/repo.git,Host行就必须写10.0.1.5,不能写git.internal) - 密钥有密码但没加载:
ssh-add -l为空,说明 agent 没启动或密钥没加进去;运行ssh-add ~/.ssh/id_ed25519手动加载
composer.json 的 URL 必须匹配 ~/.ssh/config 的 Host 别名
Composer 不解析真实域名,只认你定义的 Host 别名。写错一个字母,Git 就会跳过你的 SSH 配置,直连默认 host,而那个 host 往往没配密钥。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- ✅ 正确:
"url": "git@github-personal:user/private-repo.git",对应~/.ssh/config中的Host github-personal - ❌ 错误:
"url": "git@github.com:user/private-repo.git",即使你为github.com配了密钥,Git 也不会用——它只查Host github.com,而你配的是github-personal - GitLab 子组嵌套路径对斜杠敏感:
git@gitlab-company:topgroup/subgroup/project.git合法,但若你在~/.ssh/config里把HostName写成gitlab.example.com/topgroup,SSH 会把整个字符串当主机名解析,连接直接失败,Composer 报repository '' not found—— 这个空字符串就是根本没拿到 repo 名,因为 SSH 连接阶段就断了
type 字段必须是 "vcs",URL 必须是完整 SSH 格式
Composer 对字段值极其严格,写错一个字符就会降级或静默失败。
-
type必须显式写"vcs",不能省略、不能写"git"或"package";否则 Composer 不触发git clone流程 -
url必须是git@host:group/repo.git形式(冒号分隔,以.git结尾);写成git@host/group/repo.git(斜杠)会被 Git 当作路径处理,报fatal: Could not read from remote repository - 内网非标端口(如 2222)不能直接写进 URL,必须靠
~/.ssh/config映射:Port 2222放在对应Host块里,URL 仍保持git@host:group/repo.git
缓存和凭据状态会掩盖真实问题
Composer 和 Git 的缓存机制会让问题表现得“时好时坏”,容易误判为配置已生效。
- 某次
git clone失败后,Composer 可能降级走 HTTPS,导致你以为“修好了”,其实只是绕过了 SSH 鉴权;强制走 SSH:确保所有url以git@开头,不含https://或git:// - 清除 Composer 的 Git 缓存:
rm -rf vendor/composer/installed.json和$(composer config --global cache-dir)/vcs/(路径依版本略有差异) - HTTPS 方式卡在
could not read Username:是因为 git 凭据管理器没配置;运行git config --global credential.helper store,再手动跑一次git clone https://user:token@gitlab.example.com/org/pkg.git,凭据会存入~/.git-credentials
最易被忽略的一点:SSH 配置是否生效,不看 ssh-add -l 是否列出密钥,而看 ssh -T git@your-host-alias 是否真正返回 welcome 信息。只要这一步没通,后面所有操作都是在调试假问题。

















