2010-06-04 155 views
9

ssh-add -l顯示我有3個RSA密鑰添加到我的SSH代理。 ssh-add -L顯示公鑰。我如何獲得私鑰,以便我可以將它們保存到文件中?或者在設計上這是不可能的,即ssh-agent可以被要求使用私鑰執行操作,但它永遠不會返回密鑰本身?如果是這樣,那我該如何要求它爲我加密/解密一個號碼?如何從ssh-agent中提取私鑰?

可以的,我必須爲此編寫代碼(編程語言無所謂),但我更願意使用現有的工具或庫。

回答

5

我剛剛發現了一個有關ssh-agent如何工作的非常好的解釋:http://www.unixwiz.net/techtips/ssh-agent-forwarding.html。這部分回答了我的一些問題。

  • 之一劑的更聰明的方面是它如何可以驗證用戶的身份(或者更準確地說,擁有私鑰),而不揭示私有密鑰給任何人。

  • 代理轉發的安全優勢之一是用戶的私鑰永遠不會出現在遠程系統或網絡上,即使是加密形式。

據我瞭解那裏的解釋,SSH客戶端和SSH代理之間的協議proviedes沒有辦法SSH1或SSH2脫身從ssh代理的私鑰。

+2

這不是真正的問題答案 - 即是否有任何方法可以向ssh-agent索取解密的密鑰,例如將它們提供給其他不知道如何使用ssh-agent的SSH客戶端。 – 2012-08-07 13:52:57

+2

問題的答案:不,這不可能。在鏈接文檔中列出的可能是lis,而這個不是。 – pts 2013-12-09 15:45:44

+1

恰恰相反,在虛擬世界中,所有東西都是可能的,這隻取決於實現目標的時間和精力。例如,這是您可以如何從ssh-agent中提取/竊取密鑰:https://blog.netspi.com/stealing-unencrypted-ssh-agent-keys-from-memory/ – galaxy 2015-09-05 05:43:46

-1

這是一個更多的系統管理員問題,但只需在〜/ .ssh/id_rsa或id_dsa中查找私鑰即可。他們必須首先進入ssh-agent ...

+0

我知道'〜/ .ssh/id *'文件,我不關心它們。我想訪問ssh-agent *內存中的密鑰。 – pts 2010-06-04 18:23:44

+1

我關心從其他主機添加的密鑰(通過代理轉發),並且重新連接到這些主機以讀取文件不太方便。 – pts 2015-09-05 16:15:28

1

在我的情況下,我不小心刪除了.ssh文件夾,但我的密鑰已加載。但由於我無法從ssh-add中恢復這些文件,所以我不得不使用文件恢復軟件。

+1

作爲磁盤恢復軟件的替代方案,你可以以root身份('sudo cat/proc/$$/mem')轉儲正在運行的Linux進程的內存(例如* ssh-agent *),但添加適當的查找)。可能磁盤恢復軟件更易於使用。 – pts 2018-02-20 13:13:13