如何組織 SSH 金鑰?

如何組織 SSH 金鑰?

我一直在 Debian 中為不同的帳戶(即 Digital Ocean、GitHub 和 Bitbucket)建立多個 SSH 金鑰,但它很快就會變得混亂。

列出 .ssh 資料夾中的內容,我得到:

digOcn digOcn.pub github github.pub id_rsa id_rsa.pub

(我使用id_rsaBitbucket 的密鑰。)

我做了這eval 'ssh-agent -s'件事,然後“添加”鍵,如下所示:

  • ssh-add ~/.ssh/github(然後輸入密碼)

  • ssh-add ~/.ssh/id_rsa(然後輸入密碼)

  • ssh-add ~/.ssh/digOcn(當我嘗試新增 時digOcn,它顯示「權限被拒絕」。我不會試圖sudo避免弄亂某些東西,而且因為其他按鍵不需要sudo。)

這是令人困惑的部分:表演ssh-add -l給了我這個:

2048 so:me:nu:mb:er:s0:an:d9:le:tt:er:s0 /home/USER/.ssh/id_rsa (RSA)
2048 so:me:nu:mb:er:s0:an:d9:le:tt:er:s0 /home/USER/.ssh/github (RSA)
2048 so:me:nu:mb:er:s0:an:d9:le:tt:er:s0 github (RSA)
2048 so:me:nu:mb:er:s0:an:d9:le:tt:er:s0 USER@COMPUTER_NAME (RSA)

是的,我過去曾添加過 SSH 金鑰,但我無法追溯我所做的事情。這可能就是為什麼兩者都有/home/USER/.ssh/github github


我做錯了什麼?我應該如何組織我的 SSH 金鑰?

答案1

首先,不同的帳戶使用不同的金鑰並沒有什麼問題。對於互動式 shell 來說,這幾乎是大材小用,但是當您處理其他非互動式服務時,這樣做是有正當理由的。例如,幾年前 GitHub 開始允許使用更強的 SSH 金鑰,而 Bitbucket 則堅持使用較弱的金鑰一段時間。當時正確的做法是使用不同的金鑰來存取 GitHub 和 Bitbucket。

另一個例子是rsync。例如,如果您用於rsync將檔案部署到 Web 伺服器,那麼您可能需要專用的 SSH 金鑰。這些允許您設定與互動式帳戶通常使用的權限不同的權限。

回到管理多個金鑰的問題:SSH 允許您為不同的目的地設定不同的選項。為此,您需要編輯~/.ssh/config以下文件:

Host  bitbucket.org
    User                    hg
    IdentitiesOnly          yes
    IdentityFile            /home/user/.ssh/bitbucket

Host  github.com  gist.github.com
    User                    git
    IdentitiesOnly          yes
    IdentityFile            /home/user/.ssh/github

該文件~/.ssh/config應該具有權限 0600(我現在不記得這是否是由 SSH 強制執行的,但這肯定不會有什麼壞處)。

當然,您也可以對互動式 shell 使用相同的機制,因此請設定遠端使用者名稱(如果與本機使用者名稱不同)、遠端連接埠、縮短主機名稱等內容。

Host  sm
    Hostname                sphygmomanometer.example.com
    User                    human
    Port                    2222

然後你就可以運行

ssh sm

代替

ssh -p 2222 [email protected]

也允許使用通配符:

Host *
    ControlPath             ~/.ssh/ctl-%u-%r-%h-%p
    ControlMaster           auto
    ControlPersist          5m

請閱讀手冊以了解更多詳細資訊。

最後但並非最不重要的:「做事eval 'ssh-agent -s'」。與一般看法相反,這會帶來嚴重的安全隱患。正確的做法是這樣的:

ssh-agent /bin/bash
ssh-add

(然後在出現提示時輸入您的金鑰密碼)。僅此而已,不要逐個按鍵或任何其他方式進行操作。

這會執行一個新的 shell,在其中載入您的金鑰,當您想要撤銷存取權限時,只需使用exit此 shell。如果您“執行該eval 'ssh-agent -s'操作”,那麼身份驗證代理將在您登出後長時間運行,並且它們可以(並且最終將)用於未經授權的存取。

編輯:試試這個小實驗:

  1. eval $(ssh-agent -s)
  2. 註銷,或終止終端
  3. 重新登錄,或開啟新終端
  4. pgrep ssh-agent

沒有人會殺死這些ssh-agents,它們會一直徘徊直到下一次reboot,準備被最新的惡意軟體使用。

相關內容