ssh-keygen: создание SSH-ключей, регистрация открытого ключа и использование ssh-copy-id

Тестовая средаСемейство RHELAlmaLinux 9.8Учётная запись rootПроверено 2026-11-05
Сетевые командыssh-keygenssh-copy-idРасположение/usr/bin/ssh-keygen

ssh-keygen — команда OpenSSH, которая создаёт пару из закрытого и открытого ключа для SSH-подключений, а также проверяет отпечатки, меняет парольную фразу и чистит known_hosts. На сервере AlmaLinux 9 мы создали ключи ed25519 и rsa, проверили отпечатки, сменили парольную фразу и комментарий, а затем проверили ssh-copy-id в режиме dry-run: на сервер уходит только одна строка открытого ключа из файла .pub.

Имена учётных записей и пути к файлам ключей в выводе ниже — примерные значения, а отпечатки, открытые ключи и randomart взяты у ключей, созданных при написании статьи и затем удалённых. Команда, которая на самом деле регистрирует открытый ключ на сервере, приведена, но не выполнялась.

1️⃣ Создание ключа в ssh-keygen: -t ed25519 и комментарий -C

Ключ создаётся в виде ssh-keygen -t ТИП -C КОММЕНТАРИЙ. -t — тип ключа, а -C — комментарий в конце открытого ключа, куда пишут адрес электронной почты или назначение ключа. Ниже полный вывод, когда файл задан через -f, а на оба вопроса о парольной фразе нажат Enter.

ssh-keygen -t ed25519 -C "user@example.com" -f ~/.ssh/id_ed25519
Generating public/private ed25519 key pair.
Enter passphrase for "/home/user/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|     .           |
|    o o          |
|     = o   .     |
|    =   Soo .    |
|     = *+*.. .   |
|    o.B.o++ .    |
|    .=o*Eo.+     |
|    o+=@OO=      |
+----[SHA256]-----+

Если на вопрос о парольной фразе нажать только Enter, ключ будет без парольной фразы. Если опустить -f, перед этим вопросом сначала появится строка с вопросом, куда сохранить файл. В скобках указан путь по умолчанию — .ssh/id_ed25519 в домашней папке, и простое нажатие Enter сохраняет ключ туда.

randomart в конце вывода — это отпечаток в виде рисунка. При создании ключа и при повторной проверке через -lv появился один и тот же рисунок.

ls -l ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
-rw------- 1 user user 411 Oct 29 08:22 /home/user/.ssh/id_ed25519
-rw-r--r-- 1 user user  98 Oct 29 08:22 /home/user/.ssh/id_ed25519.pub

Закрытый ключ создан с правами 600, открытый — с правами 644. Закрытый ключ храните только на своём компьютере и никуда не отправляйте.

cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com

Открытый ключ — это одна строка из типа ключа, значения ключа и комментария, разделённых пробелами. Именно эта строка попадает в authorized_keys на сервере, к которому вы подключаетесь. Назначение каждого файла в папке собрано в дерево.

~/.sshПапка, где хранятся ключи и данные о подключениях · права 700
id_ed25519Закрытый ключ · файл только на вашем компьютере · права 600
id_ed25519.pubОдна строка открытого ключа · записывается в authorized_keys на целевом сервере · права 644
authorized_keysСписок открытых ключей, с которыми можно войти на этот сервер (лежит на принимающем сервере)
known_hostsКлючи хостов серверов, к которым вы подключались · ssh-keygen -R удаляет их построчно
configПсевдонимы, порты и файлы ключей для каждого сервера (ssh_config)

2️⃣ Параметры ssh-keygen: -f, -N, -b, -q

Отвечать на вопросы удобно при ручном вводе, но в скрипте вопросы нужно убрать совсем. Если задать файл через -f, а парольную фразу через -N, ключ создаётся сразу, без вопросов.

ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N "" -C "deploy@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/deploy_key
Your public key has been saved in /home/user/.ssh/deploy_key.pub
The key fingerprint is:
SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com
The key's randomart image is:
+--[ED25519 256]--+
|        +        |
|       o +       |
|        +    .   |
|       . +  o    |
|    . o S ++o    |
|   . + +   B+    |
|  .oo * + .=+    |
|  E+o* Boo=++.   |
|   .=.=oo=o++.   |
+----[SHA256]-----+

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

ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N ""
Generating public/private ed25519 key pair.
/home/user/.ssh/deploy_key already exists.
Overwrite (y/n)?

При повторном запуске с тем же именем после already exists команда спрашивает, перезаписать ли файл. После ввода n ничего не изменилось, и команда завершилась с кодом выхода 1. Чтобы случайно не перезаписать используемый ключ, создавайте новые ключи под другим именем.

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" -C "user@example.com"
Generating public/private rsa key pair.
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:f+uwCSQjMka1BEHzXADwIWbrlbVRiP6Z4tjnwNwPVAA user@example.com
The key's randomart image is:
+---[RSA 4096]----+
|o=BE*=+.         |
|oo.Oo++          |
| .+o+. .         |
|....  .          |
| .+ o.= S        |
| .o+o= + .       |
|  ++.o  . o .    |
| . o..o  . = .   |
|    o. .  o.o    |
+----[SHA256]-----+

Для rsa длину задаёт -b. По руководству значение по умолчанию — 3072 бита; выше ключ создан с 4096 битами, и в заголовке randomart появилось RSA 4096. В руководстве сказано, что у ed25519 длина фиксирована, поэтому -b для него игнорируется.

ssh-keygen -f ~/.ssh/default_key -N "" -C "user@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/default_key
Your public key has been saved in /home/user/.ssh/default_key.pub
The key fingerprint is:
SHA256:mwy02fpKxjxEVvLC2EUJeaMIiNFOVS0GwWVjN9v0j4c user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|o+ o+=O=*..      |
|o + .*+B== .     |
| o ..oB+o.. .    |
|  . .+.=     +   |
|      = S   E o  |
|     + + o   .   |
|      B +        |
|     o o         |
|      ...        |
+----[SHA256]-----+

Без -t был создан ключ ed25519.

ssh-keygen -q -t ed25519 -f ~/.ssh/backup_key -N "" -C "backup@example.com"; echo rc=$?
rc=0

С -q скрывается всё, включая отпечаток и randomart, и остаётся только код выхода. Это пригодится, когда скрипт создаёт ключи для нескольких серверов.

📌 Основные опции: результаты из этой статьи

ОпцияНазначениеРезультат в этой статье
-t ТИПТип создаваемого ключаВ первой строке вывода виден тип, например ed25519 или rsa; без параметра — ed25519
-C КОММЕНТАРИЙКомментарий в конце открытого ключаuser@example.com в конце открытого ключа, показанного через cat
-f ФАЙЛПуть к файлу ключаСтрока о сохранении в /home/user/.ssh/deploy_key; при повторном запуске с тем же именем already exists и Overwrite (y/n)?
-N ФРАЗАНовая парольная фраза (passphrase); пустые кавычки — без парольной фразыМесто сохранения и отпечаток сразу, без вопроса о парольной фразе
-b БИТЫДлина ключаПри 4096 для rsa в заголовке randomart RSA 4096
-qСкрывает весь выводОстаётся только строка rc=0, выведенная echo
-lВыводит отпечаток файла ключаОдин и тот же отпечаток SHA256 у открытого и закрытого ключа; для authorized_keys — по строке на ключ
-E ХЕШЗадаёт тип хеша отпечаткаС -E md5 отпечаток, начинающийся с MD5:00:7b:02:5e
-vВместе с -l выводит и randomartТот же randomart, что при создании ключа
-yИзвлекает открытый ключ из закрытого и выводит егоОдна строка открытого ключа, совпадающая с файлом .pub до символа
-pМеняет парольную фразу закрытого ключаПоявляется строка о сохранении с новой парольной фразой, а закрытый ключ растёт с 411 до 464 байт
-P ФРАЗАСтарая парольная фраза (установленная сейчас)С верной фразой — открытый ключ, с неверной — incorrect passphrase supplied to decrypt private key
-cМеняет комментарий; новый задаётся через -COld comment: user@example.com и Comment 'user@laptop' applied
-F ХОСТИщет строку этого хоста в known_hosts# Host 192.0.2.10 found: line 1 и сама строка
-R ХОСТУдаляет строку этого хоста из known_hostsknown_hosts updated и исходный файл known_hosts.old; для отсутствующего хоста — not found
-HХеширует имена хостов и адреса в known_hostsСтроки начинаются с |1|, и выводится WARNING о том, что файл .old хранит строки без хеширования

📎 Другие опции: по официальному руководству

ОпцияНазначение
-a РАУНДЫЧисло раундов KDF (bcrypt_pbkdf) при сохранении закрытого ключа; чем больше, тем медленнее проверка парольной фразы и выше стойкость к перебору; по умолчанию 16
-AСоздаёт недостающие ключи хоста для каждого типа по умолчанию (rsa, ecdsa, ed25519) в путях по умолчанию
-BВыводит дайджест bubblebabble файла ключа
-eПреобразует ключ OpenSSH в формат -m (по умолчанию RFC4716) и выводит его, для других SSH-программ
-iПреобразует ключ без парольной фразы в формате -m (по умолчанию RFC4716) в формат OpenSSH и выводит его
-m ФОРМАТЗадаёт формат ключа (RFC4716, PKCS8, PEM); вместе с -p преобразует закрытые ключи между форматами OpenSSH и PEM
-r ХОСТВыводит по открытому ключу DNS-запись SSHFP для этого имени хоста
-s КЛЮЧ_CAПодписывает открытый ключ ключом CA и создаёт сертификат
-LВыводит содержимое сертификата
-KЗагружает в текущую папку resident-ключи, хранящиеся на FIDO-аутентификаторе
-Y signПодписывает файл SSH-ключом; подпись сохраняется с .sig в конце имени файла, а пространство имён задаётся через -n

3️⃣ ssh-keygen -l для проверки отпечатка и -y для извлечения открытого ключа

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

ssh-keygen -l -f ~/.ssh/id_ed25519.pub
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
ssh-keygen -l -f ~/.ssh/id_ed25519
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)

Файл открытого ключа и файл закрытого ключа дали один и тот же отпечаток SHA256. Число 256 в начале — длина ключа, а скобки в конце — тип ключа.

ssh-keygen -l -E md5 -f ~/.ssh/id_ed25519.pub
256 MD5:00:7b:02:5e:b8:ba:85:0c:32:d7:15:7e:72:45:f7:bc user@example.com (ED25519)

С -E md5 вывод переходит на старый формат отпечатка MD5. Это нужно для сверки, когда старый сервер или панель управления показывает отпечатки MD5.

ssh-keygen -lv -f ~/.ssh/id_ed25519.pub
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
+--[ED25519 256]--+
|                 |
|     .           |
|    o o          |
|     = o   .     |
|    =   Soo .    |
|     = *+*.. .   |
|    o.B.o++ .    |
|    .=o*Eo.+     |
|    o+=@OO=      |
+----[SHA256]-----+

Если добавить -v, randomart появится снова. Это был тот же рисунок, что и при создании ключа.

ssh-keygen -l -f ~/.ssh/authorized_keys
256 SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com (ED25519)

Если передать файл с несколькими строками открытых ключей, например authorized_keys, на каждый ключ выводится по строке отпечатка. Так проверяют, какие ключи зарегистрированы на сервере.

ssh-keygen -y -f ~/.ssh/id_ed25519
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com

-y снова извлекает открытый ключ из закрытого. Если файл .pub удалён или на другой компьютер перенесён только закрытый ключ, достаточно сохранить этот вывод в файл. Вывод совпал с исходным файлом .pub до символа.

4️⃣ ssh-keygen -p для смены парольной фразы и -c для смены комментария

Если поставить на закрытый ключ парольную фразу (passphrase), даже утёкшим файлом нельзя воспользоваться без неё. Зато её нужно вводить при каждом подключении, поэтому она подходит для ключей, которыми люди пользуются вручную, но не для ключей скриптов, работающих сами, например по cron.

ssh-keygen -p -f ~/.ssh/id_ed25519 -P "" -N "example-pass"
Key has comment 'user@example.com'
Your identification has been saved with the new passphrase.

-P — старая парольная фраза, -N — новая. У ключа не было парольной фразы, поэтому в -P переданы пустые кавычки, и появились две строки о повторном сохранении с новой парольной фразой. В руководстве сказано, что -p без параметров по очереди спрашивает старую и новую парольную фразу.

ls -l ~/.ssh/id_ed25519
-rw------- 1 user user 464 Oct 29 08:22 /home/user/.ssh/id_ed25519

После установки парольной фразы файл закрытого ключа вырос с 411 до 464 байт.

ssh-keygen -y -f ~/.ssh/id_ed25519 -P "example-pass"
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com
ssh-keygen -y -f ~/.ssh/id_ed25519 -P "wrongpass"
Load key "/home/user/.ssh/id_ed25519": incorrect passphrase supplied to decrypt private key

Для ключа с парольной фразой -y тоже требует фразу, переданную через -P. С верной фразой вышел тот же открытый ключ, что и раньше, а с неверной команда завершилась ошибкой incorrect passphrase. В руководстве прямо сказано, что утерянную парольную фразу восстановить нельзя, поэтому если вы её забыли, создайте новый ключ и заново зарегистрируйте открытый ключ.

ssh-keygen -c -C "user@laptop" -f ~/.ssh/id_ed25519 -P "example-pass"
Old comment: user@example.com
Comment 'user@laptop' applied
cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@laptop

-c меняет комментарий. Старый и новый комментарии выводятся каждый в своей строке, и комментарий в конце файла открытого ключа тоже стал user@laptop. Комментарий — лишь метка для различения ключей, поэтому само значение ключа не изменилось.

ssh-keygen -p -f ~/.ssh/id_ed25519 -P "example-pass" -N ""
Key has comment 'user@laptop'
Your identification has been saved with the new passphrase.

Чтобы убрать парольную фразу, передайте в -N пустые кавычки. Появляются те же две строки, и после этого -y снова работает без -P.

5️⃣ ssh-keygen -R: удаление ключа хоста из known_hosts

В known_hosts построчно накапливаются ключи хостов серверов, к которым вы подключались. Если сервер переустановить и его ключ хоста изменится, ssh отклонит подключение, так как ключ не совпадает с сохранённым, и параметр, удаляющий старую строку, — это -R. known_hosts ниже — файл из трёх строк с примерными адресами, указанный через -f.

cat ~/.ssh/known_hosts
192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk
server2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW

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

ssh-keygen -F 192.0.2.10 -f ~/.ssh/known_hosts
# Host 192.0.2.10 found: line 1
192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk

-F выводит строку этого хоста вместе с её номером. Для отсутствующего хоста ничего не вывелось, и команда завершилась с кодом выхода 1.

ssh-keygen -R 192.0.2.10 -f ~/.ssh/known_hosts
# Host 192.0.2.10 found: line 1
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
cat ~/.ssh/known_hosts
server2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW

-R удаляет строку этого хоста и сохраняет исходный файл как known_hosts.old. После удаления осталось только две строки.

ssh-keygen -R 192.0.2.99 -f ~/.ssh/known_hosts
Host 192.0.2.99 not found in /home/user/.ssh/known_hosts
ssh-keygen -R "[192.0.2.30]:2222" -f ~/.ssh/known_hosts
# Host [192.0.2.30]:2222 found: line 2
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old

Для отсутствующего хоста вывелась только одна строка not found. Сервер с другим портом найдётся, только если указать квадратные скобки и порт точно так, как они записаны в known_hosts.

ssh-keygen -H -f ~/.ssh/known_hosts
WARNING: /home/user/.ssh/known_hosts.old contains unhashed entries
Delete this file to ensure privacy of hostnames
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
cat ~/.ssh/known_hosts
|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
|1|AG9QJQvGaQmVsEusSdND1lM9cKI=|Ue0a9suJIzN0yxoJgV7ClLBgSYw= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR

-H хеширует имена хостов и адреса. Этот параметр не даёт утёкшему файлу выдать, к каким серверам вы подключались; имя и адрес, соединённые запятой, разделились на две хешированные строки. Заодно появилось предупреждение, что файл .old ещё хранит содержимое без хеширования.

ssh-keygen -F server2.example.com -f ~/.ssh/known_hosts
# Host server2.example.com found: line 1
|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR

Даже в хешированном файле -F нашёл строку по имени.

6️⃣ ssh-copy-id: регистрация открытого ключа и authorized_keys

Одного создания ключа мало: пока сервер не знает открытый ключ, вход по-прежнему идёт по паролю. Место, где сервер узнаёт открытый ключ, — ~/.ssh/authorized_keys учётной записи, под которой вы входите, а ssh-copy-id — команда, которая добавляет в этот файл строку из .pub. Закрытый ключ остаётся на вашем компьютере, и передаётся только строка открытого ключа. Нажимайте кнопки шагов на схеме ниже, чтобы увидеть, где оказываются оба файла.

🔐 Как пара ключей ssh-keygen используется при подключении
Поясняющая схема
🔍 Шаги
$ ssh-keygen -t ed25519 -C user@example.comssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10ssh -i ~/.ssh/id_ed25519 user@192.0.2.10
💻 Мой компьютер ~/.ssh
🔒id_ed25519Закрытый ключ · никуда не отправляется
🔑id_ed25519.pubОдна строка открытого ключа · копируется на сервер
➜Пока нет на сервереСкопирована одна строка открытого ключаСервер проверяет открытым ключом
🖥️ Сервер ~/.ssh/authorized_keys
📄ПустоВход только по паролю
🔑ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.comЗарегистрированный открытый ключ · пройдёт только закрытый ключ в паре с этой строкой
ssh-keygen создаёт закрытый и открытый ключ парой. Закрытый ключ хранится только в ~/.ssh на вашем компьютере, а открытый — это одна строка в файле .pub. На этом шаге на сервере ещё ничего нет, поэтому вход возможен только по паролю.
ssh-copy-id добавляет строку открытого ключа в конец ~/.ssh/authorized_keys на сервере. Закрытый ключ не копируется. Открытый ключ не обязательно держать в секрете, поэтому одну и ту же строку можно добавить на несколько серверов.
При подключении сервер открытым ключом из authorized_keys проверяет подпись вашего закрытого ключа. Если пара совпадает, вход выполняется без пароля; на компьютере без файла закрытого ключа пароль спросят даже для той же учётной записи.
ssh-copy-id -n -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: ERROR: ssh: connect to host 192.0.2.10 port 22: Connection timed out

-n — это dry-run, поэтому на сервер ничего не записывается. Тем не менее ssh-copy-id сначала пробует войти с этим ключом, чтобы отсеять уже зарегистрированные ключи, а так как 192.0.2.10 — адрес для документации, подключения не было, и всё закончилось на timed out. Параметры после -o передаются в ssh без изменений.

ssh-copy-id -n -f -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
=-=-=-=-=-=-=-=
Would have added the following key(s):

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.com
=-=-=-=-=-=-=-=

-f — принудительный режим, пропускающий эту проверку. Вместе с -n строка открытого ключа, которая попала бы на сервер, появилась под Would have added. Это та же строка, что и содержимое файла .pub.

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10

Настоящая регистрация выполняется этой командой без -n. По скрипту ssh-copy-id и руководству команда один раз спрашивает пароль учётной записи, добавляет открытый ключ в конец ~/.ssh/authorized_keys на сервере и затем выводит Number of key(s) added: 1. Если файла и папки нет, она их создаёт, а если такой же ключ уже есть, пропускает его.

ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@192.0.2.10

Если порт не 22, передайте его через -p.

Там, где нет ssh-copy-id, добавьте строку открытого ключа в authorized_keys на сервере сами. Войдите на сервер по паролю и выполните шаги ниже. Вывод проверен добавлением файла .pub на том же сервере; для другого сервера скопируйте строку из файла .pub и добавьте её через echo.

mkdir -p ~/.ssh
chmod 700 ~/.ssh

Если папки .ssh нет, создайте её и выставьте права 700.

cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.com
ls -l ~/.ssh/authorized_keys
-rw------- 1 user user 100 Oct 29 08:22 /home/user/.ssh/authorized_keys

Строка открытого ключа попала в authorized_keys с правами 600. В пункте StrictModes руководства sshd_config сказано, что с настройками по умолчанию sshd сначала проверяет права на файлы пользователя и отклоняет вход, если писать в них может кто угодно.

ssh -i ~/.ssh/id_ed25519 user@192.0.2.10

После регистрации подключайтесь с закрытым ключом. Если у ключа имя по умолчанию, например id_ed25519, ssh найдёт его сам; если имя другое, например deploy_key, укажите файл через параметр ssh -i.

🔲 Симулятор команды ssh-keygen

В симуляторе ниже можно самому ввести ssh-keygen: создать ключи, проверить отпечатки, сменить парольную фразу, почистить known_hosts и попробовать ssh-copy-id. Отпечатки и открытые ключи — те же примерные значения, что в статье, а ssh-copy-id лишь изображает регистрацию на виртуальном сервере.

Симулятор команды ssh-keygenOpenSSH 9.9p1 · user
[root@server work]#
Клавишами ↑↓ можно вызвать ранее введённые команды.

🔢 FAQ & рекомендуемые материалы

По умолчанию ssh-keygen создаёт ed25519, и этот ключ короткий: строка открытого ключа заняла 98 байт. Открытый ключ rsa на 4096 бит занял 742 байта; rsa нужен для подключения к старым серверам или устройствам, которые не принимают ed25519.

Можно. По руководству ssh, ssh автоматически ищет только имена по умолчанию, такие как ~/.ssh/id_ed25519 и ~/.ssh/id_rsa, поэтому другое имя указывают через -i при подключении или прописывают в IdentityFile в ~/.ssh/config.

По руководству sshd_config, установите PasswordAuthentication в no и заставьте sshd перечитать настройки. Отключайте только после того, как в другом терминале убедитесь, что вход по ключу работает. Если отключить до проверки, можно не войти ни по паролю, ни по ключу и остаться без доступа к серверу.

🪐ИсточникиОфициальные источники 2

ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Докажите, что вы человек: 4   +   6   =