Использование SSH ключей

Вчера наконец-то удалось разобраться как вся эта каша с 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, который спросит у Вас пароль только один раз, а потом запомнит его и Вам не будет нужды каждый раз вводить его руками.

На этом все, всем приятных выходных!