Composer config 命令无法配置 SSH 密钥,它仅管理自身配置项(如 github-oauth、http-basic),SSH 密钥由 Git 和系统 SSH 工具链管理;真正需配置的是 Git 的 url.<ssh-url>.insteadOf 规则、~/.ssh/config、密钥权限及 known_hosts。

Composer config 命令根本不能配置 SSH 密钥
别被“config”这个词误导——composer config 无法设置 SSH 密钥,它只管 Composer 自己的配置项(比如 github-oauth、http-basic、cache-dir),不碰 Git 或 SSH 层。SSH 密钥是 Git 和系统 SSH 工具链的事,Composer 完全不读取、不管理、不转发私钥。
你执行 composer config --global github-oauth.github.com xxx 是给 GitHub API 用的;而 composer config --global http-basic.repo.example.com user pass 是给 HTTPS 私库用的。这两者和 SSH 密钥毫无关系。
如果看到网上有人写 composer config --global ssh-key ~/.ssh/id_rsa,那是错的——这个命令会报错或静默忽略,因为 ssh-key 不是 Composer 支持的配置项。
真正要改的是 Git 的全局 URL 重写规则
内网包服务器(比如 git.internal)通常没开放 HTTPS 访问,或者强制走 SSH。但团队里很多人习惯写 https://git.internal/org/pkg.git,结果 Composer 就去走 HTTPS,失败后又 fallback 到密码输入,卡住。
正确做法是让 Git 自动把 HTTPS 请求转成 SSH,靠的是 git config --global url.<ssh-url-prefix>.insteadOf <https-url-prefix>:
git config --global url."git@git.internal:".insteadOf "https://git.internal/"git config --global url."git@git.internal:".insteadOf "http://git.internal/"
注意:insteadOf 后面必须带协议 + 尾部斜杠,否则不匹配;前面的 SSH 前缀末尾要有冒号(git@git.internal:),这是 Git 识别替换的关键。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
验证是否生效:运行 git ls-remote https://git.internal/org/pkg.git,如果输出远程 ref 列表,说明已自动转成 git@git.internal:org/pkg.git 并走 SSH 成功。
内网环境最常漏掉的三件事
本地能跑 ≠ 内网服务器/CI 能跑。以下三点在部署机或 Jenkins/GitLab Runner 上几乎必踩:
-
ssh-agent没启动:PHP 进程(如www-data用户)默认没 ssh-agent,得手动eval "$(ssh-agent -s)"再ssh-add /path/to/private-key - 私钥权限不是
600:chmod 600 /var/www/.ssh/id_rsa_internal必须做,否则ssh-add静默拒绝加载 -
known_hosts缺失目标主机指纹:内网服务器首次连接会被 SSH 拒绝,得提前运行ssh-keyscan git.internal >> /var/www/.ssh/known_hosts
尤其注意:Web 服务器用户(如 www-data)的 ~/.ssh 目录和密钥文件,必须由该用户所有,且不能被组或其他人读写。
composer.json 里写错一个字符就失效
即使 SSH 全链路通了,composer.json 里仓库配置错一个地方,Composer 就直接忽略整个源:
-
"type"必须是"vcs",写成"git"或留空都不行 -
"url"必须是完整 SSH 格式:"git@git.internal:group/pkg.git"—— 冒号分隔、以.git结尾、不能有https://或用户名密码 -
require中的包名(如"group/pkg")必须和私有库根目录下composer.json的"name"字段**逐字符一致**(大小写敏感) - 版本建议显式写
"dev-main"或"1.0.x-dev",避免 Composer 因找不到稳定版而跳过
最后提醒一句:别信“改完 config 就好使”这种说法。所有问题都发生在 Git 层,验证永远从 ssh -T git@git.internal 和 git clone git@git.internal:group/pkg.git 开始——这两条命令不静默成功,后面全是白忙。

















