为什么 Keychain 抱怨缺少 id_rsa.pub?

为什么 Keychain 抱怨缺少 id_rsa.pub?

我正在阅读本文在 Duplicity 中设置无人值守备份。

我在 7.2 部分。SSH KeyCaching

我已将以下内容添加到我的根目录中.bash_profile

keychain --clear id_rsa 
. /root/.keychain/www-sh

文章指出钥匙串应该启动,此时应该要求我输入我的私钥 (/root/.ssh/id_rsa) 的密码。

我在这里没有得到预期的结果,尽管 keychain 确实启动了,但此时它会发出一些警告:

KeyChain 2.6.8; http://www.gentoo.org/proj/en/keychain/
Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL

 * Found existing ssh-agent (2014)
 * ssh-agent: All identities removed.
 * Warning: /root/.ssh/id_rsa.pub missing; can't tell if /root/.ssh/id_rsa is loaded

root@www:~# 

我在Gentoo 论坛但是该线程的用户似乎对 keychain 为什么要请求感到困惑id_rsa.pub,我想知道是否有人知道为什么 keychain 会请求公钥。

答案1

我坦然承认我对钥匙串的内部工作原理一无所知,但本地 ssh 代理由于没有与其所拥有的私钥相对应的公钥而感到不安,这是完全合理的。

考虑一下当您访问远程服务器进行身份验证时会发生什么。远程服务器从其authorized_keys文件中知道它已准备好接受可以证明它拥有其中每个条目的相应私钥的客户端。但它如何向客户端索要呢?它不能给出每个私钥本身,也不能给出其任何属性,因为它没有私钥;它所能做的就是提供它将接受的公钥或其指纹。

如果客户端拥有这些公钥中的任何一个,它就可以立即选择匹配的私钥,并做出服务器将接受为正确的响应。如果它没有这些公钥,它该怎么办?依次尝试其库中的每个私钥?很难想象有比这更好的不安全信息泄露方法;黑帽只需在单个新连接上设置中间人攻击,即可从密钥环中的每个密钥中获取合法响应。

密钥对可能具有某种内部编号,但依赖这种编号完全是武断的,不明智。没有保证将私钥和公钥绑定在一起的内部属性,因为密钥对中的密钥没有任何共同之处,除了一个(希望)是唯一可以撤消另一个所做操作的实体。

不,客户端为任何给定的服务器选择正确的私钥的最佳方法是使用匹配的公钥来协助其进行密钥选择。

答案2

我认为keychain它试图比其辅助程序更安全(ssh)。

从我当前的 OpenSSH 版本开始,可以在没有公钥文件的ssh-agent情况下将私钥添加到。完成此操作后,您可以查看它是否成功,因为还会列出私钥文件名。即使有多个身份可用,也会使用缓存的密钥进行连接。文档中明确提到了依次尝试它们。ssh-addssh-add -lssh

$ ssh -V
OpenSSH_7.2p2, OpenSSL 1.0.2g  1 Mar 2016
$ man ssh_config
...
     IdentityFile
      ...
             It is possible to have multiple identity files speci‐
             fied in configuration files; all these identities
             will be tried in sequence.  Multiple IdentityFile
             directives will add to the list of identities tried
             (this behaviour differs from that of other configura‐
             tion directives).
      ...

我认为最好使用AddKeysToAgent选项ssh。如果您有密码,它将仅在会话第一次要求输入密码ssh-agent。在您的密码中.bashrc添加eval $(keychain --eval --noask)

相关内容