亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何指定將使用哪個 ssh 密鑰 `go get`

如何指定將使用哪個 ssh 密鑰 `go get`

Go
慕標5832272 2022-07-25 11:26:09
我在同一臺筆記本電腦(運行 Ubuntu 版本 20)上使用兩個不同的 github 帳戶(個人和工作)。我需要能夠使用我的工作 github 帳戶的 ssh 密鑰從工作中訪問私人存儲庫。我已經使用一些簡潔的 git config 控件完成了所有工作,即在我的~/.gitconfig文件中我放了:[url "[email protected]: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 Nameemail = [email protected][core]sshCommand = ssh -i ~/.ssh/id_rsa工作配置包含:[user]name = Your Nameemail = [email protected] = <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_repogo 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 -l521 SHA256:EKvhgg24_blah_bApjLSqX4J7l0 [email protected] (ECDSA)4096 SHA256:r/qcO94F+ox_blah_JkTiVk+aERk [email protected] (RSA)當我刪除我的個人 ssh 密鑰(即rm ~/.ssh/id_rsa*)然后go get在私人倉庫上工作得很好,所以我知道它肯定只是試圖使用錯誤的 ssh 密鑰。由于某種原因,它忽略了 git config core.sshCommand。
查看完整描述

3 回答

?
慕工程0101907

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"


查看完整回答
反對 回復 2022-07-25
?
jeck貓

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


查看完整回答
反對 回復 2022-07-25
?
吃雞游戲

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 密鑰提取遠程代碼,而無需每次都輸入,需要密鑰。


查看完整回答
反對 回復 2022-07-25
  • 3 回答
  • 0 關注
  • 274 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號