我正在寻找实施签名证书进行SSH身份validation。 我在这里遵循了这些步骤,现在正试图弄清楚我将如何在我的系统上实现它。
作为一个例子,我们有两个环境:生产和testing; 每个用自己的“用户密钥”来签署其他密钥。 我希望能够控制谁可以访问每个环境,但我遇到的不便之处是允许一个用户使用相同的私钥访问两个环境。
从'-i identity_file'下的'ssh'的手册页:
ssh也会尝试从通过追加-cert.pub到标识文件名获得的文件名加载证书信息
这似乎意味着我将不得不拥有私钥的多个副本(只是以不同的名称命名),并相应地为证书文件命名,除了添加.ssh / config文件条目以便使用正确的证书。
我的理解是,如果你在.ssh / config中指定了多个IdentityFile条目,ssh将会尝试每个条目。 但是,似乎没有选项(至less在文档中找不到)来指定证书。
有没有办法在.ssh / config中指定一个证书文件(除了假定的-cert.pub),或者是一个包含要检查的证书列表的文件?
我不知道这样做的好方法,但是我知道两种方法。
ssh-agent似乎非常乐意为单个身份存储多个证书。 所以,如果你有id_ed25519作为你的id和id_ed25519-cert1.pub和id_ed25519-cert2.pub ,你可以这样做:
cp id_ed25519-cert1.pub id_ed25519-cert.pub ssh-add id_ed25519 cp id_ed25519-cert2.pub id_ed25519-cert.pub ssh-add id_ed25519
而现在这两个证书都可以与身份一起使用。 再次,这不是一个好的解决scheme。
为指向相同身份的其他身份创build符号链接,并为每个身份提供自己的证书。 或直接复制它们。 再丑陋,但应该工作。
您可能会试图将多个证书(因为它们都是一行)放在一个-cert.pub文件中。 在我的系统上,这只能识别第一行。
如果想获得额外的娱乐时间,请注意,用一个证书签署一个身份将被覆盖而不确认一个已经存在的证书。
在我看来,这里的根本问题是,与主机CA一起使用的相同模型对于授权用户不起作用。 签署一个主机密钥(假设你指定了一个主体)是一个validation声明 – 它只声明通过这个签名你知道服务器的主机密钥标识它是合法的。
签署一个用户密钥同样expression了authentication ,但是在这里你还有另外一个授权的问题–CA的签名表明这个密钥能够合法地标识用户,并且允许用户login到机器上。
主机密钥和用户密钥并不是双重的,因为启动与服务器的握手与login(即使限制了您的function)没有可比性,因此无法进行处理。
Debian Stretch搭配OpenSSH 7.4p1,以下内容适用于我:
把每个证书放在一个单独的文件中,例如:
~/.ssh/id_ed25519-cert-ca1.pub ~/.ssh/id_ed25519-cert-ca2.pub
然后在〜/ .ssh / config中列出你的证书文件:
CertificateFile ~/.ssh/id_ed25519-cert-ca1.pub CertificateFile ~/.ssh/id_ed25519-cert-ca2.pub
现在ssh命令应该自动尝试并select正确的证书。
从man ssh_config:
可以在configuration文件中指定多个证书文件; 这些证书将按顺序尝试。 多个CertificateFile指令将添加到用于authentication的证书列表中。