RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


linux:bash:ssh-keygen_macos

SSH: подключение по ключу без пароля на примере macOS

Заметка готова на 95%. Нужно прояснить некоторые моменты с keychain.

Минимум теории и максимум хауту. За теорией лучше обратиться на сайт wikipedia или на ssh.com

Шаг 1. Создать пару ключей

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

$ ssh-keygen -t rsa -b 4096 -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/dx/.ssh/id_rsa): 

Здесь

  • -t - алгоритм шифрования
  • -b - размера ключа
  • -C - комментарий. Ъ администраторы, указывают не только контактный email, но и идентификатор хоста, с которого будет использоваться ключ (например MacBook office).

Пр желании можно дать ключу другое имя (ключ -f), например id_rsa_server_vps13.

Следующий пункт passphrase. Это парольная фраза или проще говоря пароль для ключа.

Минусы. Его нужно будет вводить каждый раз, когда используется ключ.
Очевидный плюс. Если файл окажется в чужих руках без парольной фразы использовать его не получится. Ну и не стоит использовать пароли admin111 или qwerty123.

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/dx/.ssh/id_rsa.
Your public key has been saved in /Users/dx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Xdjkhw+A6JeOhccoLTKhV1MdwgwwlV/2vZ2pGT00UZk [email protected]
The key's randomart image is:
+---[RSA 4096]----+
|  ooo*oo.o. .  .+|
|  ..+ +.=  * ..E |
| . o = * o..* .. |
|. + o * *....+o  |
| . o o *S .  =.+ |
|      . .   o *  |
|             + . |
|            o    |
|                 |
+----[SHA256]-----+

Шаг 2. Скопировать открытый ключ на удаленный хост

Как всегда в unix есть множество вариантов для этого.

Долгий путь

В macOS можно скопировать содержимое файла в буфер обмена с помощью pbcopy

$ cat /Users/dx/.ssh/id_rsa.pub | pbcopy

Подключаемся к удаленному серверу, переходим в директорию .ssh и открываем (или создаем) файл authorized_keys.

Добавляем ключ из буфера обмена.

Кстати каждый ключ должен быть на отдельной строке. И никаких пустых строк между ключами.

ssh-copy-id

Начиная с Sierra утилита уже есть в составе системы и не нужно ставить с github или через homebrew.

$ ssh-copy-id dx@host

или с указанием имени ключа

$ ssh-copy-id -i ~/.ssh/id_rsa_server_vps13.pub dx@host

cat + ssh

cat ~/.ssh/id_rsa.pub | ssh dx@host 'cat >> ~/.ssh/authorized_keys'

Шаг 3. Локальный конфиг SSH и тест подключение

Добавим локальный файл конфигурации для SSH клиента в файл ~/.ssh/config.

Host rtfm
   Hostname rtfm.wiki
   Port 31337
   user dx
   IdentityFile ~/.ssh/id_rsa
   AddKeysToAgent yes
   UseKeychain yes
  • HostName – IP адрес или FQDN.
  • User – Имя учетной записи на удаленном сервере.
  • IdentityFile – Локальный путь к приватному ключу
  • Host - назовем его алиасом.

Проверка подключения

$ ssh rtfm

Особый интерес представляют опции UseKeychain и AddKeysToAgent.

Пароль приватного ключа можно хранить в "Связке ключей" (Apple KeyChain). Один раз добавили и всё - больше никогда не надо вводить никаких паролей для подключения по ssh.

В каком-то релизе (Sierra? у меня не Linux, чтобы отслеживать это) всё сломали и Terminal теперь по-умолчанию не использует keychain.

Подробности

Опция AddKeysToAgent вышла в OpenSSH 7.2 еще в 2016 году, но я узнал про нее только сейчас.

Из changelog'а

В клиент ssh добавлена опция AddKeysToAgent, управляющая передачей в ssh-agent закрытого ключа, используемого в процессе аутентификации. Опция может принимать значения 'yes', 'no', 'ask', и 'confirm' (по умолчанию 'no')

Что еще важного в ссылках выше?

  • Добавить private key вручную в keychain ssh-add -K ~/.ssh/private_key_name
  • Проверить права chmod 600 ~/.ssh/id_rsa

Буду рад если кто-то более подробно разобрался в данном вопросе и дополнит заметку.

EOM

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 
linux/bash/ssh-keygen_macos.txt · Последнее изменение: 2021/06/17 12:53 — dx