2013-08-07 131 views
1

我只是在玩使用curl來將scp/sftp的一些文件轉移到遠程盒子的想法,並且想知道如果我不能將我的密鑰保存到我的私鑰安全使用ssh-agent並且只能使用密鑰文件本身。我的知識是,真的沒有辦法做到這一點,但我希望我錯了。CURL SSH密鑰安全

編輯:更多描述

我已經生成的SSH密鑰登錄到我的遙控盒,我已經把密碼的關鍵,我想用這個鍵登錄到遠程盒的libcurl和設置CURLOPT_SSH_PRIVATE_KEYFILE到正確的密鑰文件,但是我將不得不設置CURLOPT_KEYPASSWD,因爲我設置了一個密碼短語,根據我的理解,這隻能使用純文本,並且對我來說看起來並不安全。也許它是一個非問題?

+0

安全嗎? – mnagel

+0

只是爲公衆看,如果他們得到我的源代碼 – csteifel

+0

什麼源代碼?我想你應該更詳細地描述你的情況。 – mnagel

回答

0

如果您想要完全自動化身份驗證,那麼身份驗證憑證必須存儲在某處。

通常情況下,如果你有權訪問某臺機器,那麼你可以讀取任何東西,包括他們主目錄中的其他人的私鑰文件。

出於這個原因,引入了通行短語來加密集中存儲中的私鑰文件。當你在你自己的機器上安裝一個共享的主目錄時(假設你只有root用戶),使用密碼並解密它是安全的。然後將真正的密鑰臨時存儲在內存中(理論上root可以訪問它)。

如果您使用ssh-agent,那麼它會在重新啓動時擦除的內存中保留您的密碼(需要解密密鑰文件),並且您需要重新輸入密碼。

現在,如果您需要使用curl(或任何其他)的非交互式身份驗證,那麼獲取解密密鑰文件的所有信息都需要位於機器的某個位置。如果您是唯一可以訪問該機器的用戶,則無需密碼即可保存。

如果沒有......那麼你不會得到完全安全的,除非你想在每次訪問時手動輸入密碼(甚至那時root可能是討厭的,而你的進程得到密碼的話就是ptrace)。在這種情況下,我建議您將密碼文件放在易失性存儲器中(例如/dev/shm),並拒絕除您自己以外的所有人訪問。 Root仍然可以閱讀它。這需要在每次重新啓動時重複。

+0

雅這就是我認爲我有一種感覺沒有辦法真正保證它:/哦,以及 – csteifel

0

您可以將加密形式的密碼存儲在某處。從您存儲它的任何地方讀取加密的密碼,解密它,將CURLOPT_KEYPASSWD設置爲解密的密碼,使用curl訪問遠程盒,然後取消設置CURLOPT_KEYPASSWD

仍然無法保護您不受真正確定的入侵者的影響,但它使這足以讓偶然的入侵者不敢嘗試。