我正在使用 git bash 並使用 ssh-keygen 設定 ssh 金鑰,每次我使用 repo git 執行某些操作時,都會詢問我/c/Users/jankiewj/.ssh/id_rsa
.有沒有辦法禁用該密碼。
編輯: 我編輯了原始標題(刪除了Windows),因為我剛剛在我的工作筆記型電腦上使用了全新安裝的Ubuntu,當ssh 密鑰有密碼短語時,它總是要求它,並且解決此問題的解決方案是相同的。這可能在 MacOSX(也是 Unix)上運作相同,並使用相同的基本工具。
答案1
答案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-add
only。 - 在 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 時完全相同。