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