如何使用带口令的SSH密钥认证执行go get拉取私有代码仓库
解决方案
你可以通过以下几种方案解决该问题,无需删除SSH密钥的口令:
方案1:使用ssh-agent缓存密钥口令(最推荐)
ssh-agent可以在当前会话中保存你的密钥口令,避免重复输入,操作步骤如下:
- 启动当前终端会话的ssh-agent服务:
eval "$(ssh-agent -s)" - 把你的SSH私钥添加到ssh-agent中,默认私钥路径为
~/.ssh/id_rsa,如果你用的是自定义路径替换即可:ssh-add ~/.ssh/id_rsa - 执行添加命令后会提示你输入密钥的口令,验证通过后,当前终端会话内所有调用SSH的操作(包括
go get调用git拉取依赖)都不需要再输入口令。 - MacOS用户可以执行
ssh-add -K ~/.ssh/id_rsa将口令缓存到系统钥匙串,重启设备后也无需重新输入。 - 如果你希望每次打开终端都自动生效,可以把上述两条命令添加到
~/.bashrc、~/.zshrc等终端配置文件中。
方案2:配置Git强制走SSH协议+开启口令提示
大部分场景下go get报错是因为默认走HTTPS协议拉取代码,不会调用本地SSH密钥,你可以配置Git的路径替换规则强制走SSH:
- 执行全局Git配置命令,以GitHub为例:
git config --global url."git@github.com:".insteadOf "https://github.com/"
如果你用的是其他私有Git平台,替换对应域名即可。 - 配置环境变量让SSH强制在终端弹出口令输入提示:
export GIT_SSH_COMMAND="ssh -o BatchMode=no"
配置完成后可以先手动执行git clone git@github.com:任意公开仓库地址验证,能正常拉取或提示输入口令就说明配置生效,再执行go get就不会出现权限报错。
内容的提问来源于stack exchange,提问作者Victor Hugo Montes
相关产品推荐
相关产品推荐

