====== SSH: подключение по ключу без пароля на примере macOS ======
Заметка готова на 95%. Нужно прояснить некоторые моменты с keychain.
Минимум теории и максимум хауту. За теорией лучше обратиться на сайт wikipedia или на [[https://www.ssh.com/ssh/keygen|ssh.com]]
{{:linux:should_change_my_ssh_key.png?nolink|}}
===== Шаг 1. Создать пару ключей =====
Нужно создать пару ключей: приватный (закрытый) ключ и публичный (открытый) ключ. Приватный ключ никогда никуда никому не передавать. Публичный ключ можно показывать всем.
$ ssh-keygen -t rsa -b 4096 -C "dx@rtfm.wiki"
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 dx@rtfm.wiki
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 утилита уже есть в составе системы и не нужно [[https://github.com/beautifulcode/ssh-copy-id-for-OSX|ставить с 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.
Подробности
* https://developer.apple.com/library/archive/technotes/tn2449/_index.html
* https://www.os-privacy.de/macos-keychain-ssh-passphrase-6388/
* https://apple.stackexchange.com/a/250572
Опция **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
{{tag>ssh osx keychain}}