Ssh
我必須將私鑰儲存在文件中嗎?
我有一個數據庫驅動的應用程序,需要通過 ssh 與另一台伺服器通信。Web 應用程序可以生成密鑰對並向使用者提供公鑰,或者它可以在 Web 表單的欄位中接受未加密的私鑰。然後,它使用可逆加密對密鑰進行加密,並將其儲存在其數據庫中。
當 Web 應用程序與 ssh 伺服器通信時,我需要解密私鑰並將其以某種方式提供給 ssh。我可以創建一個安全的臨時文件
mktemp
,將 ssh 指向它,然後銷毀該文件,但這是一項額外的工作,它以一種似乎沒有必要的新方式公開密鑰。我看過man ssh
,man ssh-agent
和man ssh-add
,但似乎沒有任何方法可以使用密鑰而不先將其添加到文件中。我錯過了什麼?
如果您想使用現有的工具,例如
ssh
/ssh-agent
,您必須將密鑰作為文件提供。另一種可能更可行的解決方案是直接
ssh
在您的應用程序中實現客戶端並依賴第三方庫(例如JSch )或擴展其中一個ssh
/ssh-agent
以直接從您的數據庫接收和解密密鑰。
文件是應用程序之間交換數據的主要方式。它不必是磁碟文件。它可以是臨時儲存或管道上的文件。
ssh-add
只要密鑰文件不受密碼保護¹,您就可以在其標準輸入中輸入密鑰文件(並且由於密鑰文件是加密儲存的,因此沒有理由在頂部對其進行密碼保護)。或者,不要做任何花哨的事情並將文件寫入記憶體支持的文件系統,例如
/run
(或/dev/shm
或/tmp
或您的發行版提供的任何內容)。或者,保留私鑰文件,不進行外部加密,但在上面設置密碼。使用隨機生成的長密碼,並將該密碼儲存在數據庫中。
¹在實驗
ssh-add
上,無法搜尋的受密碼保護的密鑰文件會阻塞,例如命名管道。