我正在閱讀本文關於在 Duplicity 中設定無人值守備援。
我處於 7.2 部分。 SSH 金鑰緩存
我已將以下內容新增至我的根目錄中.bash_profile
keychain --clear id_rsa
. /root/.keychain/www-sh
文章指出鑰匙圈應該啟動,並且此時應該要求我提供我的私鑰 (/root/.ssh/id_rsa) 的密碼。
我在這裡沒有得到預期的結果,儘管鑰匙串確實啟動了,但它此時拋出了一些警告:
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 論壇但該線程的用戶似乎對為什麼鑰匙串要求提供公鑰感到困惑id_rsa.pub
,我想知道是否有人知道為什麼鑰匙圈會要求公鑰。
答案1
我坦率地承認,我對鑰匙圈的內部工作原理一無所知,但是本地 ssh 代理應該因為沒有與其所擁有的私鑰相對應的公鑰而感到不安,這是完全合理的。
考慮一下當您訪問遠端伺服器進行身份驗證時會發生什麼。遠端伺服器從其authorized_keys
文件中知道它已準備好接受可以證明其具有其中每個條目對應的私鑰的客戶端。但它如何向客戶提出這樣的要求呢?它不能給出每個私鑰本身,也不能給出其任何屬性,因為它沒有它;它所能做的就是提供它所接受的公鑰或其指紋。
如果客戶端擁有這些公鑰中的任何一個,它可以立即選擇匹配的私鑰,並做出伺服器將接受的正確回應。如果它沒有這些公鑰,該怎麼辦?依序嘗試其曲目中的每個私鑰?幾乎無法想像有更好的方法來解決不安全的資訊揭露問題。黑帽只需對單一新連接設定中間人攻擊,即可從密鑰環中的每個密鑰獲取合法回應。
密鑰對可能有某種內部編號,但這完全是任意的,依賴它是不明智的。沒有保證將私鑰和公鑰綁定在一起的內部屬性,因為金鑰對中的金鑰沒有共用任何內容,除非一個實體(希望)是唯一可以撤銷另一個實體所做的事情的實體。
不,客戶端選擇正確的私鑰用於任何給定伺服器的最佳方法是擁有匹配的公鑰來協助其進行金鑰選擇。
答案2
我認為keychain
它試圖比它作為助手的程序更安全(ssh
)。
從我目前版本的 OpenSSH 開始,可以ssh-agent
在ssh-add
沒有公鑰檔案的情況下新增私鑰。執行此操作後,您可以查看是否成功,同時ssh-add -l
列出私鑰檔案名稱。ssh
將使用快取的金鑰進行連接,即使有多個身分可用。文件中明確提到了依次嘗試它們。
$ 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)