2012-02-15 162 views
1

我有一臺開發人員的機器,並且我設置了SSH密鑰以允許他們訪問服務器。 .ssh中的公鑰和私鑰顯然對此人可見。保護SSH密鑰

有沒有辦法保護這些鑰匙?如果我不希望將這些密鑰複製到另一臺服務器的可能性,我可以做任何事嗎?

默認情況下,ssh-agent以登錄用戶身份運行,所以我可能無法拿走用戶對〜/ .ssh文件夾的訪問權限。

感謝, Tabrez

+1

不,如果您將密鑰存儲在文件中,則無關緊要。如果密鑰存儲在硬件(智能卡)中,有方法可以防止複製。 – Zoredache 2012-02-15 01:20:48

+0

SSH並不意味着限制基於機器的訪問 – madth3 2012-02-15 01:39:23

+1

我認爲你可以檢查'man sshd_config'並配置'HostCertificate'和/或'Match'來限制用戶到特定的外出主機。 – nicerobot 2012-02-15 03:22:34

回答

1

你希望允許開發者使用的關鍵,但不能複製它。

爲此,您可以將密鑰存儲在開發人員無法完全訪問的服務器上。一種實現方式如下:

  • 開發者登錄到存儲密鑰的特殊「密鑰管理者」服務器。他們可以使用不同的SSH密鑰(不是您要控制的密鑰),密碼,某種形式的雙因素身份驗證或您選擇SSH支持的其他任何方式登錄到此服務器。
  • 開發人員的該服務器上的帳戶被配置爲與它繼續通過進行這些操作的過程中的強制命令或受限制的殼:
    • 開始一個新的SSH代理(密鑰託管服務器上運行,當然)
    • 將受控密鑰加載到該代理程序中
    • 將啓動到啓用代理程序轉發的某個其他服務器的ssh連接。
  • 開發者登錄到第二個服務器(他們必須擁有一個帳戶)。第二臺服務器可能是您已經運行的通用服務器。

開發人員現在可以通過使用密鑰託管服務器上運行的代理登錄到從第二個服務器上的其他地方,但他們從來沒有獲得任何殼或機會檢查/複製的關鍵文件託管服務器。

此解決方案的缺點是,所有開發人員的會話均通過密鑰管理服務器以及第二臺共享服務器進行傳輸。如果密鑰管理服務器是遠程的,這可能是不利的。開發人員使用它將文件(SCP或SFTP)傳輸回本地計算機也很困難且不直觀。

另一種解決方案將涉及編寫軟件開發者的機器轉發SSH代理請求通過專用連接到一個真正的代理鍵託管服務器上本地創建一個存根SSH代理服務器功能。隨着一點點的工作,你可以設置爲關鍵託管服務器(本身SSH連接,我推薦)的專用連接自動啓動開發人員的機器上一個簡單的子shell有存根SSH代理的插座在它的環境,使他們能夠「只使用它「,並且這個解決方案可以非常實用和用戶友好。我自己做了這個,但它超出了Stackoverflow答案的範圍。

+0

嗨Celada - 謝謝你的迴應。我對遠程機器沒有問題,也沒有將文件傳輸機制返回給開發人員的本地機器。我將如何去保護遠程機器上的密鑰(用戶通過RDP或VNC登錄)? ssh-agent以用戶的權限運行,因此用戶最終可以訪問〜/ .ssh。 – Tabrez 2012-02-17 13:22:51

+0

用戶不能控制代理或密鑰文件本身,因爲它們不允許獲取s​​hell或在密鑰管理者上運行任意程序。當他們登錄到密鑰管理員時,他們被強制轉到受限制的shell。 – Celada 2012-02-20 19:58:30