为什么在bash脚本中source执行ssh-agent和ssh-add后git push仍报错?
问题根因
- 你的脚本中
ssh-agent bash命令会启动一个独立的子bash进程,脚本执行到这一行会直接阻塞,直到你手动退出该子bash才会执行后续的ssh-add命令 - 子bash进程的运行环境和你执行
. set_env.sh的父shell完全隔离,你在子bash中添加的SSH密钥、ssh-agent对应的环境变量都无法同步到父shell中,等你回到父shell执行git push时,完全读不到你之前添加的密钥信息,因此触发权限报错。
修复方案
方案1:修改set_env.sh脚本适配source执行
将set_env.sh的内容调整为:
# 把ssh-agent输出的环境变量导入当前shell eval `ssh-agent -s` # 添加指定密钥到当前ssh-agent ssh-add ~/.ssh/id_rsa_lrz
之后每次执行. set_env.sh后,即可正常运行git push。
方案2:配置SSH默认密钥(无需每次执行脚本)
直接编辑~/.ssh/config文件(不存在就新建),添加如下配置:
# 替换Host值为你实际使用的Git托管服务域名,比如gitee.com、gitlab.com等 Host github.com IdentityFile ~/.ssh/id_rsa_lrz IdentitiesOnly yes
保存配置后,你可以直接执行git push,不需要每次手动启动ssh-agent、添加密钥。
内容的提问来源于stack exchange,提问作者calvin
相关产品推荐
相关产品推荐

