Создание ключей RSA для SSH и установка их на сервере

Команда ssh-keygen -t rsa создает пару ключей в каталоге ~/.ssh (спрашивает имя файла, обязательно следует указывать отдельное имя файла для каждого ключа, причем использовать абсолютный путь, иначе файлы будут созданы в текущем каталоге). Файл ~/.ssh/<filename>.pub содержит открытый ключ. Файл с тем же именем, но без расширения содержит закрытый ключ.

Сразу после создания ключи готовы к использованию и никаких дополнительных действий производить не надо (не считая отправки открытого ключа на сервер).

Если Вы собираетесь использовать в системе несколько ключей, то нужно их зарегистрировать (у меня не требовалось, видимо это нужно только если ключи создавались не на локальной машине, а были получены извне). Для этого выполняем команду:

ssh-add <полный путь к файлу приватного ключа>

Если при создании ключа использовался пароль, то утилита потребует его ввести. После добавления ключа, он начнет использоваться программами типа ssh. Просмотреть список всех зарегистрированных в системе ключей можно командой

ssh-add -l

ВНИМАНИЕ!
Для нормальной работы git (и, возможно, других приложений, использующих SSH) необходимо чтобы закрытый ключ имел права доступа 600 (чтение и запись для владельца и закрытый доступ для всех остальных).

Загрузка ключа на сервер

Ключевой момент: на удаленную машину нужно закачать только открытый ключ. Это делается командой

ssh-copy-id -i ~/.ssh/<key_filename> <username>@<IP-адрес-сервера>

утилита подключится к удаленному серверу (спросит пароль указанного в параметрах юзера) и установит там открытый ключ, указанный в команде.

ВНИМАНИЕ! Расширение файла открытого ключа (.pub) в команде указывать не нужно!

  • username - имя пользователя, зарегистрированное на сервере. 
  • вместо IP-адреса можно использовать доменное имя
  • на локальной машине (с которой производится подключение) должны быть оба ключа (используется только приватный)
  • Если ключ импортируется через cPanel, то на странице импорта нужно указать имя ключа (любое, просто чтобы отличать один ключ от другого) и импортировать только открытый ключ.

Вход на удаленную машину

Вход в консоль удаленной машины выполняется командой:

ssh <username>@<IP-адрес-сервера>

Ошибка “Too many authentication failures”

Если на локальной машине используется множество ключей, то возникают проблемы с тем, что удаленные сервера не разрешают подключение, ссылаясь на то, что слишком много ключей отправлено (расценивают это как попытку подбора ключа).

Чтобы решить эту проблему, необходимо создать файл ~/.ssh/config со следующим содержимым:

Host <IP-адрес-сервера>
IdentityFile <путь-к-файлу-приватного-ключа>
IdentitiesOnly=yes

Здесь мы указали ssh-агенту, что при обращении к серверу с указанным IP-адресом следует использовать указанный файл ключа.

Подобных записей в этом файле может быть несколько, вместо IP-адресов можно использовать доменные имена и т.д. Лучше для каждого отдельного ключа создавать подобную запись.

Использование с PuTTY

Если созданные ключи нужно использовать с windows-софтом, то там скорее всего будет использоваться либо PuTTY, либо plink.exe. В любом случае, эти программы используют свой формат файлов закрытого ключа (файлы с расширением ppk). Так же ключи этого формата понядобятся Вам если Вы хотите подключаться к серверу, используя FileZilla.

Чтобы конвертировать закрытый ключ в формат ppk, необходимо установить пакет putty-tools:

apt-get install putty-tools

После этого конвертирование производится командой:

puttygen <файл_закрытого_ключа> -o <файл_в_формате_putty>.ppk

Дополнительная информация, которая Вам скорее всего пригодится

Создаем на сервере дополнительных пользователей

Для создания нового пользователя выполняем команду

useradd -m <username>

Задаем пароль:

passwd <username>

и дважды вводим новый пароль.

Добавляем пользователя в группу `www-data`:

usermod -a -G www-data <username>

Задаем шелл для пользователя:

usermod -s /bin/bash <username>

Теперь пользователь может подключаться по SSH, введя свой пароль, используя уже описанную команду:

ssh <username>@<hostname or IP>

Так же нужно не забыть указать его владельцем папок, к которым он должен иметь полный доступ.


Комментарии