SSH-авторизация по ключу. Создание ключей (ssh-keygen)

Создано: 03.06.25

Заходить на удаленный сервер по протоколу SSH можно не только по паролю, также с помощью так называемых ключей авторизации.

Каждый такой ключ состоит из открытой части и закрытой. Или надо говорить о ssh-парах ключей, один из которых является открытым (шифрует данные), второй ‒ закрытым (способен расшифровать данные, которые были зашифрованы его парным открытым ключом).

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

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

Исходя из вышесказанного, ключевую пару следует создаваться на компьютере, с которого будет вестись подключение (обычно это ваш локальный). Для этого используется программа ssh-keygen, которая по всей видимости входит в состав пакета ssh.

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

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

$ ssh-keygen -t rsa
$ ssh-keygen -t ed25519 -C "электронная почта, к которой привязан ваш аккаунт на GitHub"
$ ssh-keygen -t rsa -b 4096 -C "электронная почта, к которой привязан ваш аккаунт на GitHub"

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

Обычно хостинговые компании и GitHub предоставляют специальное поле, в которое надо встависть содержимое публичного ключа. В терминале вывести его можно с помощью утилиты cat.

Если такой возможности нет, ключ можно скопировать вручную и на сервере вставить в файл authorized_keys или сделать это с помощью команды ssh-copy-id:

$ ssh-copy-id -i ~/.ssh/id_ed25519.pub tech@site.com