为什么Keychain compain id_rsa.pub缺失?

我正在阅读关于在Duplicity中设置无人值守备份的文章 。

我在7.2中。 SSH KeyCaching

我已经将以下内容添加到我的根.bash_profile

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

文章指出,钥匙串应该启动,并且我应该被要求为我的私钥(/root/.ssh/id_rsa)在这一点上我的PASSPHRASE。

我没有得到预期的结果,虽然钥匙链的确开始了,但是在这一点上却抛出了一些警告:

 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为什么会要求公钥。

我自由地承认,我并不知道钥匙串的内部运作,但是一个本地的ssh代理人不应该有一个与它拥有的私钥相对应的公共密钥是完全合理的。

考虑当接近远程服务器进行身份validation时会发生什么情况。 远程服务器从其authorized_keys文件知道它已准备好接受可以certificate其中具有对应私钥的客户机。 但是如何从客户那里要求呢? 它不能给每个私钥本身,也不能给它的任何财产,因为它没有; 它所能做的只是呈现它将接受的公钥或指纹。

如果客户端拥有这些公钥中的任何一个,则可以立即select匹配的私钥,并作出服务器接受的响应。 如果它没有这些公钥,那么它是做什么的? 尝试每个私钥在其剧目中依次? 不安全的信息披露的一个更好的配方是难以想象的; 一个黑帽子只需要在一个新的连接上build立一个中间人攻击来从你的钥匙圈中的每个钥匙收集合法的响应。

关键字有可能具有某种内部编号,但这完全是任意的和不明智的依靠。 没有保证的内部属性将私钥和公钥结合在一起,因为没有任何密钥对中的密钥共享,除了(希望)唯一的实体能够撤消其他的密钥对。

不,客户select正确的私钥用于任何给定的服务器的最好方法是使用匹配的公钥来帮助其select密钥。

我认为keychain试图比它是帮助程序( ssh )的程序更安全。

从我目前版本的OpenSSH开始,可以使用ssh-add添加一个私钥给ssh-agent ,而不需要公钥文件。 执行此操作后,您可以看到它是否成功,因为ssh-add -l也会列出私钥文件名。 即使有多个身份可用, ssh也会使用caching的密钥进行连接。 在文档中明确提到尝试它们。

$ 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)