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
然后每次使用 [email protected] 時,都會使用正確的 ssh 密鑰。
與此相關的是對 的補充~/.gitconfig,它有助于導入私有存儲庫。它使用 ssh 對這些主機進行了所有 git 操作:
[url "[email protected]:"]
insteadOf = https://github.com/
[url "[email protected]:"]
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 關注
- 274 瀏覽
添加回答
舉報