Link Search Menu Expand Document
07 Августа 2022 г.

Создание и настройка ssh ключей

Содержание
  1. Немного про ключи
  2. Клиент
    1. Типы и генерация ключей
    2. Фаил known_hosts
  3. Как передать ключ на сервер

Вскользь я уже упоминал об этом https://lexusalex.ru/11-ssh-authentication-by-key

Сегодня расширим информацию.

SSH клиент - это программа для подключения к SSH серверу.

Подключится на сервер можно используя:

  • пароль
  • ключ

Про вход по ключу сегодня и поговорим.

! Важно понимать кто в данным момент является сервером, а кто клиентом!

Клиент всегда подключается к серверу, но сервер тоже в определенным момент может являться клиентом.

Немного про ключи

На клиенте нужно сгенерировать пару зашифрованных ключей:

  • публичный (public)
  • приватный (private)

Приватный или закрытый ключ используется клиентом и должен быть надежно защищен. Открытый или публичный ключ можно свободно передавать на сервер, он используется для шифрования сообщений, которые можно расшифровать только приватным ключом.

Открытый ключ клиента выгружается на сервер в файл ~/.ssh/authorized_keys в директории пользователя, под которым осуществляется вход. Задача любым способом передать открытый ключ на сервер.

Когда клиент пытается пройти аутентификацию с использованием ключей, сервер может протестировать клиент на наличие у него закрытого ключа. Если клиент может доказать, что у него есть закрытый ключ, сервер выполняет запрошенную команду или открывает сеанс соединения. В противном случае доступ не предоставляется.

Клиент

Для генерации ключа используется программа ssh-keygen.

В самом примитивном случае сгенерировать пару ключей очень просто таким образом

ssh-keygen -t rsa
ssh-keygen # что тоже самое

Типы и генерация ключей

Команда поддерживает создание ключей по следующим алгоритмам:

  • dsa - небезопасен к использованию
  • ecdsa
  • ecdsa-sk
  • ed25519 - самый рекомендуемый алгоритм доступный сегодня. Открытый ключ такого алгоритма компактен и быстро работает
  • ed25519-sk
  • rsa - только если его длина 4096 бит, тогда все хорошо, по умолчанию это 2048, что вполне допустимо

Флаг -t как раз отвечает за алгоритм шифрования.

Создадим еще несколько ключей, но с другими именами, так как с этим именем у нас уже есть. Один без парольной фразы, другой с ней.

ssh-keygen -t ed25519 -f ~/.ssh/my_key_1_ed25519 -C "alexsey_89@bk.ru" # Без passphrase
ssh-keygen -t ed25519 -f ~/.ssh/my_key_2_ed25519 -C "alexsey_89@bk.ru" # C passphrase

Флаг -f место куда сохранить пару ключей.

Флаг -C комментарий в теле публичного ключа.

Просмотреть отпечаток ключа можно командой ssh-keygen -l -v -f ~/.ssh/my_key_1_ed25519.pub.

Вывести публичный ключ указав в нем путь до приватного ssh-keygen -y -f ~/.ssh/my_key_1_ed25519.

Если у приватного ключа не будет установлены права 600, программа ssh-keygen будет выводить ошибку.

Если нужно настроить более точно к каким хостам можно подключаться нужно создать конфигурационный файл ~/.ssh/config.

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

Фаил known_hosts

В файле known_hosts хранится список публичных ключей хостов к которым мы подключаемся с данного клиента.

Этот файл аутентифицируем клиента на сервере к которому он подключается.

При первом подключении к серверу видим приблизительно такое сообщение:

The authenticity of host 'github.com (140.82.121.4)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

The authenticity of host '[192.168.88.155] ([192.168.88.155])' can't be established.
ED25519 key fingerprint is SHA256:f7Ahp2Y7EmWX5Rxl/JJl26+Rb1Q6jMWeZKnaHJPAhVI.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Публичный ключ в этом файле должен совпадать с публичным ключом на сервере в каталоге /etc/ssh/

Как передать ключ на сервер

Теперь нужно безопасным способом передать ключ на сервер и сохранить в файле ~/.ssh/authorized_keys

Каждая строка файла содержит один ключ (пустые строки, и строки начинающиеся с ‘#’ игнорируются как комментарии).

Публичные ключи состоят из следующих разделённых пробелами полей: опции, тип ключа, ключ в кодировке base64, комментарий.

Тип ключа может быть указан так

  • ecdsa-sha2-nistp256
  • ecdsa-sha2-nistp384
  • ecdsa-sha2-nistp521
  • ssh-ed25519
  • ssh-dsa
  • ssh-rsa

Теперь перейдем к способам передачи ключа на сервер:

ssh-copy-id -i ~/.ssh/my_key_1_ed25519.pub alex@192.168.88.155
ssh-copy-id -i ~/.ssh/my_key_2_ed25519.pub alex@192.168.88.155 # Это ключ с парольной фразой, при входе она будет запрашиваться
# либо такие команды
cat ~/.ssh/my_key_1_ed25519.pub | ssh alex@192.168.88.155 'cat >> ~/.ssh/authorized_keys'
cat ~/.ssh/my_key_1_ed25519.pub | ssh alex@192.168.88.155 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" # Немного видоизменили команду, теперь она еще и проверяет наличие папки ./ssh

xclip -selection clipboard < ~/.ssh/my_key_1_ed25519.pub # Скопировать в буфер обмена
scp ~/.ssh/my_key_1_ed25519.pub | ssh alex@192.168.88.155 'cat >> ~/.ssh/authorized_keys' # Но здесь не идет проверка на существование ключа

И после этого мы без труда сможет зайти на сервер, без каких-либо проблем


Возник вопрос или предложение пиши на почту alexsey_89@bk.ru или в Телеграмм канал

Дата публикации: 07 Августа 2022 г.

Наверх

Последнее изменение страницы: 07 Августа 2022 г.