Содержание
SSH: подключение по ключу без пароля на примере macOS
Минимум теории и максимум хауту. За теорией лучше обратиться на сайт 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
Обсуждение