題 自從我更新到Sierra以來,macOS一直在問我的ssh密碼


它曾經記住密碼,但現在它每次都向我詢問。

我已經讀過我需要使用此命令重新生成公鑰,我這樣做了:

ssh-keygen -y -f id_rsa > id_rsa.pub

但它沒有解決任何問題。

如何讓macOS再次記住我的密碼呢?


524
2017-09-22 09:21


起源


我遇到了相關的行為:早些時候,會彈出密鑰環對話框來詢問密碼,現在我只是得到常規的SSH控制台提示符。一些幫助程序註冊可能已經消失。 - Daniel B
自從我生成id_rsa以來,已經有好幾年了,而且我從未使用過密碼並將其用於ssh到許多服務器。我真的有一個密碼,或者只是Sierra認為我應該這樣做嗎?注意$ cat~ / .ssh / id_rsa | head -2 ----- BEGIN RSA PRIVATE KEY ----- Proc-Type:4,ENCRYPTED - Joe Murray
重複的 apple.stackexchange.com/q/254468/62697 - Cœur
如果你正在使用Pretzo,這些答案都沒有解決你的問題:確保你沒有 ssh 啟用模塊 zpretzorc。無論如何,它在macOS上是不必要的,如果啟用,它甚至會在您添加之後提示您輸入密碼 UseKeychain。 - Jimothy
試著做 ssh -v ... 看看它是否有任何有用的調試信息...... - rogerdpack


答案:


在最新版本的macOS(10.12.2)中,這很容易解決。只需編輯你的 ~/.ssh/config 並啟用 UseKeychain 選項:

Host *
    UseKeychain yes

沒有必要改變其他任何東西。現在一切都按照它在最新更新之前的工作方式運行。您無需添加密鑰 ssh-agent


編輯: 您可能仍需要輸入一次密碼。如果您不知道,請按照 這些說明 透露它。


1017
2017-12-19 12:04



這對我來說絕對有用。以下所有內容似乎比此修復更複雜。 - Br.Bill
注意, Host * 塊(應該)幾乎總是放在你的底部 ~/.ssh/config 文件。什麼時候 ssh 正在尋找它使用的設置 第一 它找到的價值。因此,通過將通配符塊放在最後,它將作為一組默認值;您可以通過在文件中先前指定它們來覆蓋特定主機的設置。 - Molomby
這也適用於我,但我確實必須正確輸入一次密碼。有 另一個答案 描述瞭如果您不記得密碼,您將如何查看密碼。 - FGreg
如果配置文件不存在,則創建一個並添加它也可以。 - wynshaft
你不需要 Host * 標題。只需附加單行 UseKeychain yes 在你的頂部 .ssh/config 如果您希望這適用於所有主機。 - sj26


我有同樣的問題。 MacOS Sierra鑰匙串一直在詢問密碼。為了安全起見,您的id_rsa應使用密碼加密。然後嘗試將其添加到鑰匙串中 ssh-add -K ~/.ssh/id_rsa

如果您的密鑰位於另一個文件夾中 ~/.ssh 然後用正確的文件夾替換。

鑰匙串現在知道你的ssh密鑰了,希望現在所有的工作都有效(我的確如此)


170
2017-09-23 12:53



這有效但似乎在我重新啟動計算機時不會持續存在。其他人有同樣的問題嗎? - joshua.paling
是的,同樣的問題在這裡。 @ joshua.paling - kingkool68
@ joshua.paling,kingkool68 - Apple已經刪除了在重新啟動時記住SSH密鑰的能力,以符合主流的OpenSSH行為。有關實現相同功能的其他方法,請參閱此問題: apple.stackexchange.com/questions/254468/... - Evan Pon
@EvanPon但這不適用於加密密鑰,不是嗎? - Konrad Rudolph
@KonradRudolph對我有用。調用 ssh-add 隨著 -A 選項將在MacOS鑰匙串中查找相關身份的任何密碼。我相信如果密碼不在鑰匙串中,它會提示你。 - Evan Pon


這修復了我的類似問題:

/usr/bin/ssh-add -K

這會在您的鑰匙串中存儲密碼短語。

更新 (感謝@EasyCo): 這有效但在重新啟動之間不會持續存在。 @ jukka-suomela在此頁面上的解決方案  重啟工作。你可以在這裡找到答案:

https://superuser.com/a/1158050/234685


65
2017-10-09 14:39



這是唯一有效的方法。 - cryptic0
使用此解決方案時,我不需要創建.ssh / .config。 - Shai
這對我有用。無需編輯主機文件。我在塞拉利昂。 - cchiera
這適用於Mac OS Sierra。 - Dayron Gallardo
如前所述,這有效,但在重啟之間不會持續存在。 @ jukka-suomela的解決方案在重啟時工作。 - EasyCo


我只需輸入一次正確的密碼即可開始工作。問題是我不記得我原來的SSH密碼短語,但我通過以下方式恢復了它 這些步驟來自Github:

  • 在Finder中,搜索Keychain Access應用程序。
  • 在Keychain Access中,搜索SSH。
  • 雙擊SSH密鑰的條目以打開一個新對話框。
  • 鑰匙串訪問對話框在左下角,選擇顯示密碼。
  • 系統將提示您輸入管理密碼。將其鍵入“Keychain Access”對話框。
  • 您的密碼將被洩露。

39
2017-10-29 17:16



不起作用。終端仍然說“糟糕的密碼” - Jayden Lawson


在新款MacBook Pro上安裝Sierra over El Capitan後,上述解決方案均無效。 Sierra by design不會在密鑰鏈中保存SSH密鑰。

兩種解決方案對我有用。一種是添加命令 ssh-add -A &> /dev/null 到〜/ .bash_profile。每次打開終端時,都會執行此命令( &> /dev/null part發送命令的輸出文件/ dev / null)。

一個更複雜但更輕微的解決方案是創建一個plist,其中包含每次啟動操作系統時執行的命令,如 在macOS Sierra keychain中保存SSH密鑰。這涉及使用Xcode創建文件。


18
2017-09-27 14:40



這似乎也是Apple官方的回答 - 請參閱 openradar.appspot.com/27348363 - Nick Maynard
迄今為止最好的解決方案。我正在使用Mac OSX Sierra(10.12.2)。 - zyc


一個修復是將以下內容添加到〜/ .ssh / config文件中:

Host *
   AddKeysToAgent yes
   IdentityFile ~/.ssh/id_rsa
   UseKeychain yes

取自: https://www.reddit.com/r/osx/comments/52zn5r/difficulties_with_sshagent_in_macos_sierra/ 另見: https://apple.stackexchange.com/a/264974/3810


14
2017-12-16 06:14



到目前為止,沒有任何答案,有人提到過 Bad configuration option: usekeychain 我用UseKeychain得到的錯誤(但它是大寫的)。但是我 是 能夠通過刪除該行並離開AddKeysToAgent和IdentityFile來使其工作(您仍然必須首次輸入密碼)。這是與macOS Sierra 10.12.6。 - William Turrell
當我在終端並使用ssh命令時,這很好用,但是其他應用程序,比如使用自己的終端的WebStorm,在我第一次在常規終端中使用ssh命令之前不會進行配置。然後它無處不在,有什麼建議嗎? - santiago arizti
@WilliamTurrell如果仍然發生這種情況,請鍵入 which ssh 確保您使用 /usr/bin/ssh 而不是來自Fink或MacPorts的版本,它們可能會像 /usr/local/bin/ssh 要么 /opt/local/bin/ssh - Stefan Lasiewski


今天早上,我在更新到Sierra後遇到了同樣的問題。在我的情況下, id_rsa 文件已加密,解密後它就像一個魅力。

  1. 驗證你的 id_rsa 使用以下命令加密文件: cat ~/.ssh/id_rsa | head -2
  2. 如果第二行說 Proc-Type: 4,ENCRYPTED,它是加密的,你可以嘗試解密它
  3. 重要提示:備份原件 id_rsa 文件!使用該命令 cp ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
  4. 解密你的私鑰 openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa.decrypted
  5. 刪除原始密鑰(rm ~/.ssh/id_rsa)並用解密的替換它: mv ~/.ssh/id_rsa.decrypted ~/.ssh/id_rsa

完成這些步驟後,您應該可以再次使用ssh。


7
2017-09-22 10:58



雖然這是一種解決方法,但我認為並非如此 解決了 OP的問題。 - Daniel B
這對我有用。 @DanielB,這樣做有什麼問題? - Dag Høidahl
@DagHøidahl密鑰將不再加密。它可以通過常規用戶權限被盜,因此加密是一個強大的應該。 - Daniel B
這會從密鑰中刪除密碼,這就是解決OP問題的原因。但我建議不要這樣做。密碼就是阻止人們在被盜時使用密鑰的密碼。由於您的密鑰可能會訪問多個系統,因此您不希望削弱它。 - Martijn Heemels


嘗試使用部署代碼時,我也遇到了這個問題 Capistrano的。非常令人沮喪。以下是我知道處理此問題的兩種方法。

方法1:添加 眾所周知 SSH代理的密鑰。

所以我找到的一個解決方案是運行 ssh-add 隨著 -A 選項 - 使用存儲在鑰匙串中的任何密碼將所有已知身份添加到SSH代理,如下所示:

ssh-add -A

現在這可行,但它不會在重新啟動後持續存在。因此,如果您想再也不用擔心這個問題,請打開您的用戶 ~/.bash_profile 像這樣的文件:

nano ~/.bash_profile

並將此行添加到底部:

ssh-add -A 2>/dev/null;

現在當你打開一個新的終端窗口時,一切都應該是好的!

方法2:添加 只有鑰匙串中的SSH密鑰 給代理人。

所以雖然 ssh-add -A 選項應該適用於大多數基本情況,我最近遇到了一個問題,我在一台機器上安裝了6-7個Vagrant盒子(使用SSH密鑰/身份進行訪問) id_rsa.pub 到位。

長話短說,由於服務器訪問基於密碼而SSH密鑰/身份是SSH密鑰/身份,因此基於SSH密鑰/身份的嘗試失敗太多,我最終被鎖定在遠程服務器之外。所以SSH代理嘗試過 所有 我的SSH密鑰,失敗了,我甚至無法得到密碼提示。

問題是 ssh-add -A 即使沒有必要,也會隨意添加你擁有的每一個SSH密鑰/身份;例如在Vagrant盒子的情況下。

經過多次測試後我的解決方案如下。

首先,如果您的代理程序中添加的SSH密鑰/身份比您需要的多 - 如圖所示 ssh-add -l 然後從代理中清除它們,如下所示:

ssh-add -D

完成後,啟動SSH代理作為後台進程,如下所示:

eval "$(ssh-agent -s)"

現在,它變得奇怪,我不太清楚為什麼。在某些情況下,您可以專門添加 ~/.ssh/id_rsa.pub 對代理人的密鑰/身份如下:

ssh-add ~/.ssh/id_rsa.pub

輸入你的密碼,點擊 返回 你應該好好去。

但在其他情況下,只需運行此即可獲得添加的密鑰/標識:

ssh-add -K

如果這一切都奏效了,請輸入 ssh-add -l 你應該看到一個單獨的SSH密鑰/身份列出。

都好?現在打開你的 .bash_profile

nano ~/.bash_profile

並將此行添加到底部;評論或刪除 -A版本,如果你有這個:

ssh-add -K 2>/dev/null;

這將允許在每次啟動/重新啟動時將SSH密鑰/身份重新加載到SSH代理。

更新:Apple現在添加了一個 UseKeychain 打開SSH配置選項的選項並考慮 ssh-add -A 一個解決方案。

截至macOS Sierra 10.12.2,Apple(我假設)已添加了一個 UseKeychain SSH配置的配置選項。檢查手冊頁(通過 man ssh_config)顯示以下信息:

UseKeychain
        On macOS, specifies whether the system should search for
        passphrases in the user's keychain when attempting to use a par-
        ticular key. When the passphrase is provided by the user, this
        option also specifies whether the passphrase should be stored
        into the keychain once it has been verified to be correct.  The
        argument must be ``yes'' or ``no''.  The default is ``no''.

這歸結為Apple認為解決方案要么添加 ssh-add -A 到你的 .bash_profile  正如本Open Radar機票中所述 或添加 UseKeychain 作為每個用戶的選項之一 ~/.ssh/config


3
2018-01-02 00:05





Jukka Suomela回答 是正確的,但如果你正在使用 openssh 安裝自 homebrew,那麼你還需要卸載它:

brew remove openssh

...切換回系統默認的openssh,因為自製軟件不支持 UseKeychain ssh配置條目。


3
2018-01-28 08:58



如果有人想用自製軟件,請在這裡ping我: github.com/rdp/homebrew-openssh-gssapi - rogerdpack


我在這裡嘗試了多個答案,但仍然遇到遠程密鑰傳遞問題(例如使用capistrano時)。為了解決這個問題,我從apple中讀取了技術說明並將其作為我的配置文件。不再要求我的密碼了!

https://developer.apple.com/library/content/technotes/tn2449/_index.html

Host *  
   IdentityFile ~/.ssh/id_rsa  
   IgnoreUnknown UseKeychain  
   UseKeychain yes  
   AddKeysToAgent yes

2
2018-02-15 02:15





我嘗試了這裡建議的所有解決方案,但我的Mac中沒有設置鑰匙串。

在頂部添加以下行 .ssh/config 本地和遠程機器上的文件都適合我。

PubkeyAcceptedKeyTypes=+ssh-dss 

1
2018-01-01 23:56