Вчера наконец-то удалось разобраться как вся эта каша с SSH ключами работает. Как всегда спешу поделиться! Думаю это будет полезным дополнением к статье про использование SSH ключей при работе с системой контроля версий.
Раньше использовал единственный SSH ключ для соединения с боевыми серверами, но теперь еще появилось несколько проектов работа с которыми происходит с использованием SSH ключей и из-за непонимания всей схемы работы с ними приходилось переименовывать ключи в ~/.ssh/
с id_rsa_old
на id_rsa
и наоборот, чтобы успешно пройти верификацию.
На самом деле схема работы с ключами достаточно простая:
- Создаете на локальной машине SSH ключ с помощью
ssh-keygen
илиPuTTYgen
в зависимости от того, какую OS вы используете. Для каждого сервера с которым вы собираетесь соединяться можно (да и безопаснее будет) создавать отдельные ключи. - Публичную часть ключа (с расширением .pub по умолчанию) передаете на сервер и записываете в
authorized_keys
для того пользователя под которым собираетесь подключаться к системе. - Работаете...
Первый подводный камень начинается тогда, когда Вы захотите подключаться к серверу под одним и тем же пользователем с разных клиентских машин, которые будут иметь разные клиентские ключи. В этом случае необходимо на сервере все публичные ключи записать в authorized_keys
(одна строка - один ключ). Сделать это можно с помощью ssh-copy-id
(на MacOS такого нету, но есть аналоги, которые можно запросто найти в сети). Все, головная боль с сервером завершена.
Теперь мы спотыкаемся об второй подводный камень, который появляется, когда у нас имеется одна клиентская машина с которой мы хотим подключаться к разным серверам (с использованием разных ключей), т.е. в директории ~/.ssh/
для каждого сервера лежит отдельный ключ. Теперь нам на помощь приходит ssh-add key_file
, где key_file - название файла с приватным ключом. После этого можно спокойно подключаться к серверам и радоваться жизни. Еще есть вариант использовать один ключ для соединения с несколькими серверами, менее безопасно, но тоже вполне рабочая схема.
Однако есть еще одна мелочь, которая скорее всего будет выводить Вас из себя и это постоянные запросы пароля для доступа к SSH ключу (если Вы при генерации конечно же указывали пароль). Варианта решения мне известно аж целых два! Первый - это убрать ключ с приватного файла с помощью ssh-keys
, а второй - это использовать ssh-agent
, который спросит у Вас пароль только один раз, а потом запомнит его и Вам не будет нужды каждый раз вводить его руками.
На этом все, всем приятных выходных!