如何组织 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,准备被最新的恶意软件使用。

相关内容