![Почему Keychain жалуется на отсутствие id_rsa.pub?](https://rvso.com/image/568233/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20Keychain%20%D0%B6%D0%B0%D0%BB%D1%83%D0%B5%D1%82%D1%81%D1%8F%20%D0%BD%D0%B0%20%D0%BE%D1%82%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D0%B8%D0%B5%20id_rsa.pub%3F.png)
я читаюЭта статьяпо настройке автоматического резервного копирования в Duplicity.
Я нахожусь в части под названием 7.2. SSH Key Caching
Я добавил следующее в свой корень.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
Я открыто признаю, что не разбираюсь в внутренних принципах работы keychain, но вполне разумно, что локальный SSH-агент должен расстраиваться из-за отсутствия открытого ключа, соответствующего имеющемуся у него закрытому ключу.
Подумайте, что происходит, когда вы обращаетесь к удаленному серверу для аутентификации. Удаленный сервер знает из своего authorized_keys
файла, что он готов принять клиента, который может доказать, что у него есть соответствующий закрытый ключ для каждой записи в нем. Но как он просит об этом у клиента? Он не может предоставить каждый закрытый ключ сам по себе, или какое-либо его свойство, потому что у него его нет; все, что он может сделать, это предоставить открытый ключ(и) или их отпечатки, которые он примет.
Если у клиента есть любой из этих открытых ключей, он может немедленно выбрать соответствующий закрытый ключ и сделать ответ, который сервер примет как правильный. Если у него нет этих открытых ключей, что ему делать? Попробовать каждый закрытый ключ в своем репертуаре по очереди? Лучший рецепт для небезопасного раскрытия информации вряд ли можно себе представить; злоумышленнику нужно будет только настроить атаку «человек посередине» на одно новое соединение, чтобы собрать законные ответы с каждого ключа в вашей связке ключей.
Возможно, что пары ключей имеют какую-то внутреннюю нумерацию, но это было бы совершенно произвольно и неразумно полагаться на это. Нет гарантированного внутреннего свойства, связывающего вместе закрытый и открытый ключ, потому что нет ничего общего между ключами в паре ключей, за исключением того, что один из них (надеюсь) является единственной сущностью, которая может отменить то, что делает другой.
Нет, лучший способ для клиента выбрать правильный закрытый ключ для использования на любом сервере — это иметь соответствующие открытые ключи, которые помогут ему в выборе ключа.
решение2
Я думаю, keychain
что пытается быть более безопасным, чем программа, для которой он является помощником ( ssh
).
В моей текущей версии OpenSSH можно добавить закрытый ключ в ssh-agent
with 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)