如何讓 git 不提示輸入 ssh 金鑰的密碼?

如何讓 git 不提示輸入 ssh 金鑰的密碼?

我正在使用 git bash 並使用 ssh-keygen 設定 ssh 金鑰,每次我使用 repo git 執行某些操作時,都會詢問我/c/Users/jankiewj/.ssh/id_rsa.有沒有辦法禁用該密碼。

編輯: 我編輯了原始標題(刪除了Windows),因為我剛剛在我的工作筆記型電腦上使用了全新安裝的Ubuntu,當ssh 密鑰有密碼短語時,它總是要求它,並且解決此問題的解決方案是相同的。這可能在 MacOSX(也是 Unix)上運作相同,並使用相同的基本工具。

答案1

您可以在 git bash、Windows WLS 或真正的 GNU/Linux 上的 bash 中運行它。

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

它會在第二個命令中要求輸入密碼,僅此而已。您需要執行的每個附加操作(曾經需要密碼短語)不會要求您輸入密碼短語(請參閱下面的螢幕截圖中的範例):

在 Windows 上的 git bash 中新增密碼短語

答案2

稍微好一點的和永久解決方案是在 Windows 上開啟 git bash 時自動啟動 ssh-agent。您可以將以下內容複製/貼上到 .profile 或 .bashrc 中。我更喜歡把它放在

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

該解決方案已採取來自這篇 github 幫助文章

答案3

TDLR:對於 Windows 用戶,

  • 跑步ssh-add "C:\\Users\\<your user>/.ssh/id_rsa"
  • 不是ssh-add ~/.ssh/id_rsa

例如,我一直看到這樣的情況:

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /c/Users/User/.ssh/id_rsa: 
Identity added: /c/Users/User/.ssh/id_rsa (/c/Users/User/.ssh/id_rsa)

$ git pull
Enter passphrase for key 'C:\Users\User/.ssh/id_rsa': 

請注意不一致的路徑分隔符號:ssh-agent 使用 Unix 路徑分隔符號轉換 ~,但 git 使用 Windows 路徑分隔符號。鑑於使用文件的路徑id_rsa作為鍵,這解釋了為什麼快取會遺失。

  • 另一個區別C://c/
  • 相關備註:當 git 要求您輸入密碼時,它不會被緩存,因此您可以無限期地在那裡輸入它。嘗試將短語傳遞給ssh-addonly。
  • 在 Windows 上,假設~是“多值”,因此最好是明確的。
  • ssh-add查看預設位置,例如~/.ssh/id_rsa.在 Windows 上,假設這是不明確的。明確傳入明確格式化的路徑,而不是依賴預設路徑:
    • ssh-add "C:\\Users\\<your user>/.ssh/id_rsa",即也在@velval 的回答中。

答案4

鑰匙鏈是一個聰明地完成這項工作的程序。

它應該從 .bashrc (或等效檔案)運行,並且它將正確設定環境,除了應該加載哪些鍵之外沒有任何配置。

這是我用的:keychain --quiet key1.pem key2.pem

它意識到 shell 是 Zsh,而且它的工作方式與我使用 Bash 時完全相同。

相關內容