我在同一台笔记本电脑(运行 Ubuntu 版本 20)上使用两个不同的 github 帐户(个人和工作)。我需要能够使用我的工作 github 帐户的 ssh 密钥从工作中访问私人存储库。
我已经使用一些简洁的 git config 控件完成了所有工作,即在我的~/.gitconfig
文件中我放了:
[url "git@github.com:work_account/"]
insteadOf = https://github.com/work_account/
[includeIf "gitdir:~/src/github.com/personal_account/"]
path=~/.gitconfig_personal
[includeIf "gitdir:~/src/github.com/work_account/"]
path=~/.gitconfig_work
个人配置包含:
[user]
name = Your Name
email = your.name@gmail.com
[core]
sshCommand = ssh -i ~/.ssh/id_rsa
工作配置包含:
[user]
name = Your Name
email = your.name@work.com
signingkey = <ID of GPG key>
[core]
sshCommand = ssh -i ~/.ssh/id_ecdsa
[commit]
gpgsign = true
[gpg]
program = gpg
这一切都适用于从 github 拉取和推送(并使用 gpg 密钥签署工作提交),但它go get
在私人仓库中失败。出于某种奇怪的原因go get
,试图使用我的个人 ssh 密钥 ( ~/.ssh/id_rsa
) 而不是我的工作 ssh 密钥 ( ~/.ssh/id_ecdsa
)。我已经设置了GOPRIVATE
环境变量,即
export GOPRIVATE=github.com/work_account/*
go get 的输出如下:
$ go get github.com/work_account/private_repo
go get github.com/work_account/private_repo: module github.com/work_account/private_repo: git ls-remote -q origin in /home/marc/pkg/mod/cache/vcs/ff3efb332cb48232e5da90ff2073685cbdac4a86e3a47aa11663696f4943637a: exit status 128:
ERROR: Repository not found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我可以看到我的 ssh 代理有两个键:
$ ssh-add -l
521 SHA256:EKvhgg24_blah_bApjLSqX4J7l0 your.name@work.com (ECDSA)
4096 SHA256:r/qcO94F+ox_blah_JkTiVk+aERk your.name@gmail.com (RSA)
当我删除我的个人 ssh 密钥(即rm ~/.ssh/id_rsa*
)然后go get
在私人仓库上工作得很好,所以我知道它肯定只是试图使用错误的 ssh 密钥。由于某种原因,它忽略了 git config core.sshCommand
。