Нужно ли иметь ключ ssh id_rsa?

101

Я столкнулся с этой проблемой пару раз при создании серверов сборки с проверкой ключа.

Мне было интересно, есть ли у кого-то еще опыт. У меня есть несколько ключей для моего текущего пользователя, которые могут подключаться к разным машинам. Пусть говорят machine1 и machine2. Я вставил свой открытый ключ в свой файл authorized_keys. Первый, который я назвал первым ключом id_rsa и вторым ключом.

Когда я пытаюсь подключиться к bender, я получаю следующий вывод с моим подробным подключением ssh

debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/bozo/.ssh/.ssh/identity
debug1: Trying private key: /home/bozo/.ssh/.ssh/id_rsa
debug1: Trying private key: /home/bozo/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

Он предлагает только ключ id_rsa, как вы можете видеть выше. Это верно? Если да, то почему? Как мне получить больше ключей? Я знаю, что это проблема, которую я вижу с перерывами, потому что у меня дома у меня много ключей без особых проблем.

Я также хотел бы получить обзор того, как паб и частные ключи взаимодействуют с клиентом и сервером. Я думал, что у меня довольно приличная идея, но, видимо, я чего-то не хватает.

Пожалуйста, спасибо.     

задан myusuf3 17.03.2011 в 15:37
источник

3 ответа

127

По умолчанию ssh ищет файлы id_dsa и id_rsa . Ключи не обязательно должны быть названы так, вы также можете назвать его mykey или даже поместить его в другой каталог. Однако, если вы выполните одно из этих действий, вам нужно явно указать ключ в команде ssh следующим образом:

ssh user@server -i /path/to/mykey

Если команда не принимает -i , например. sshfs , используйте параметр IdentityFile :

sshfs -o IdentityFile=/path/to/mykey user@host:/path/on/remote /mountpoint

Как это работает

При генерации ключа вы получите два файла: id_rsa (закрытый ключ) и id_rsa.pub (открытый ключ). Как показывают их имена, секретный ключ должен храниться в секрете, а публичный ключ может публиковаться публично.

Аутентификация с открытым ключом работает с открытым и закрытым ключом. У клиента и сервера есть свои ключи. При установке openssh-server открытые и закрытые ключи сервера генерируются автоматически. Для клиента вам придется сделать это самостоятельно.

Когда вы (клиент) подключаетесь к серверу, обмениваются открытыми ключами. Вы получите серверы один, а сервер ваш. При первом получении открытого ключа сервера вас попросят принять его. Если этот открытый ключ изменится с течением времени, вы будете предупреждены, потому что происходит возможная атака MITM (Человек в середине), перехватывая трафик между клиентом и сервером.

Сервер проверяет, разрешено ли вам подключение (определено в /etc/ssh/sshd_config ), и если ваш открытый ключ указан в файле ~/.ssh/authorized_keys . Возможные причины отказа публичного ключа:

  • %код%:
    • /etc/ssh/sshd_config или AllowUsers , но ваш пользователь сервера не указан в списке групп или пользователей (по умолчанию не определено, не запрещает пользователям или группам регистрироваться).
    • AllowGroups или DenyUsers указано, и вы находитесь в списке пользователей или групп.
    • Вы пытаетесь войти в систему как пользователь root, но для DenyGroups установлено значение PermitRootLogin (по умолчанию No ).
    • yes установлено на PubkeyAuthentication (по умолчанию No ).
    • yes устанавливается в другое место, а открытые ключи не добавляются в этот файл (по умолчанию AuthorizedKeysFile относительно исходного каталога)
  • .ssh/authorized_keys : ваш открытый ключ не добавляется в этот файл (обратите внимание, что этот файл читается как пользователь root)

Использование нескольких клавиш

Нередко используется несколько ключей. Вместо использования ~/.ssh/authorized_keys вы можете использовать файл конфигурации ssh user@host -i /path/to/identity_file .

Общие настройки - это IdentityFile (ключи) и порт. Следующая конфигурация будет проверять «id_dsa» и «bender» только при соединении с ~/.ssh/config :

Host yourhost
   IdentityFile ~/.ssh/id_dsa
   IdentityFile ~/.ssh/bender

Если вы опустите ssh youruser@yourhost , настройки будут применяться ко всем подключениям SSH. Для этого совпадения хостов могут быть указаны другие параметры, такие как Host yourhost , User youruser и т. Д. Это позволит вам соединиться со стенографией Port 2222 вместо ssh yourhost .

    
ответ дан Lekensteyn 17.03.2011 в 15:58
источник
26

Мой любимый метод позволяет автоматически выбирать закрытый ключ

IdentityFile ~/.ssh/%l_%r@%h_id_rsa

SSH заменит% l на имя локальной машины,% r с удаленным именем пользователя и% h с удаленным хостом, поэтому, если я хочу подключиться с моего компьютера с именем foo к bar как пользователь, я запускаю:

ssh bar

И ssh будет автоматически использовать:

~/.ssh/foo_user@bar_id_rsa

Поскольку локальный хост также сохраняется, это позволяет использовать домашние каталоги, разделяемые по NFS (разные ключи на машину!), или даже идентифицировать, на какой машине был назначен ключ ...

    
ответ дан Viperfang 19.02.2014 в 18:54
0

Учитывая комментарий StevenRoose, для определения многих ключей требуется больше времени, и я, случается, играю с большим количеством клавиш, я хотел бы предложить свое личное решение.

Я создаю символическую ссылку на ключ, который я хочу использовать в то время, и поскольку это изменяется редко, в зависимости от того, над каким проектом я работаю, я доволен этим.

Здесь я связан с моими ключами для машин, работающих под виртуальным боксом:

$ cd .ssh/
$ ln -s adam_vbox-id_rsa.pub id_rsa.pub
$ ln -s adam_vbox-id_rsa id_rsa

$ ls -l
total 12
-rw------- 1 adam adam 1675 2013-10-04 02:04 adam_vbox-id_rsa
-rw-r--r-- 1 adam adam  396 2013-10-04 02:04 adam_vbox-id_rsa.pub
lrwxrwxrwx 1 adam adam   16 2013-10-04 02:17 id_rsa -> adam_vbox-id_rsa
lrwxrwxrwx 1 adam adam   20 2013-10-04 02:17 id_rsa.pub -> adam_vbox-id_rsa.pub
-rw-r--r-- 1 adam adam 3094 2013-10-04 02:09 known_hosts

Можно также добавить очень быстрый скрипт для перехода на другой набор без необходимости вручную вводить команду ln .

Опять же, это не решение только для двух ключей, но для большего числа оно может быть работоспособным.

    
ответ дан ajhcasual 04.10.2013 в 14:43