====== 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}}