3 回答
TA贡献1887条经验 获得超5个赞
经过大量的反复试验和挖掘,我找到了解决方案。GIT_SSH_COMMAND="ssh -i ~/.ssh/id_ecdsa"
如果我在私有仓库中设置环境变量,然后go get
使用正确的 ssh 密钥,然后适用于私有仓库。似乎go get
忽略了 git configcore.sshCommand
但考虑到了 environment variable GIT_SSH_COMMAND
。
为了简化我的生活,我使用该程序direnv
在我保存工作存储库的文件夹中设置了这个环境变量。.envrc
顶级文件夹中的文件如下所示:
export GIT_SSH_COMMAND="ssh -i ~/.ssh/id_ecdsa"
TA贡献1909条经验 获得超7个赞
你需要在你的~/.ssh/config文件中。如果它不存在,只需创建它。它指定用于每个主机的 ssh 密钥。您可以通过添加无效域来添加别名:
Host gitlab.com
IdentityFile ~/.ssh/id_ed25519
Host github.com
IdentityFile ~/.ssh/id_ed25519
Host github.invalid
HostName github.com
IdentityFile ~/.ssh/id_rsa
然后每次使用 git@github.invalid 时,都会使用正确的 ssh 密钥。
与此相关的是对 的补充~/.gitconfig,它有助于导入私有存储库。它使用 ssh 对这些主机进行了所有 git 操作:
[url "git@github.com:"]
insteadOf = https://github.com/
[url "git@gitlab.com:"]
insteadOf = https://gitlab.com/
GOPRIVATE另请参阅列出不使用代理的私有存储库的环境变量。示例:
GOPRIVATE=*.corp.example.com,rsc.io/private
TA贡献1829条经验 获得超7个赞
您可以使用 SSH 代理。ssh-agent
是openssh的一部分。它还在内存中保存未加密的密钥和证书。它们已准备好供 ssh 使用。
例如,当您拥有带有passphase
. 默认情况下,它每次都会要求您输入密钥密码阶段,Go 正在尝试从上游克隆/拉取代码。
有几个命令,你可以使用:
echo $SSH_AGENT_PID
- 查看代理是否分配给当前会话。该SSH_AGENT_PID
变量应返回 pid 的ssh-agent
.eval $(ssh-agent)
- 开始一个新的ssh-agent
会话。ssh-add -l
- 列出 ssh 会话中可用的密钥ssh-add ~/.ssh/tmp/id_rsa
- 将~/.ssh/tmp/id_rsa
密钥添加到当前会话。
示例会话可以是:
ip-192-168-200-63:tf-r0 daniel$ echo $SSH_AGENT_SOCK
ip-192-168-200-63:tf-r0 daniel ^C
ip-192-168-200-63:src daniel$ eval `ssh-agent`
Agent pid 50734
ip-192-168-200-63:src daniel$ echo $SSH_AGENT_PID
50734
ip-192-168-200-63:src daniel$ ssh-add -l
The agent has no identities.
ip-192-168-200-63:src daniel$ ssh-add ~/.ssh/tmp/id_rsa
Enter passphrase for /Users/daniel/.ssh/tmp/id_rsa:
Identity added: /Users/daniel/.ssh/tmp/id_rsa (/Users/daniel/.ssh/tmp/id_rsa)
ip-192-168-200-63:src daniel$ ssh-add -l
2048 SHA256:nm/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX /Users/daniel/.ssh/tmp/id_rsa (RSA)
ip-192-168-200-63:src daniel$
之后,我可以使用受密码保护的 ssh 密钥提取远程代码,而无需每次都输入,需要密钥。
- 3 回答
- 0 关注
- 234 浏览
添加回答
举报