Аутентификация на основе ключей
Рекомендуется защитить нового пользователя, настроив аутентификацию на основе ключей. Если у вас ещё нет пары SSH-ключей, сгенерируйте их:
ssh-keygen
К примеру, если пользователь локальной машины называется localuser, команда вернёт такой результат:
ssh-keygen output
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/localuser/.ssh/id_rsa):
Чтобы принять предложенное имя файла и путь, нажмите return.
После этого будет запрошен пароль (или парольная фраза) для защиты ключей. Его устанавливать необязательно.
Примечание: Если пропустить парольную фразу, вы будете иметь возможность использовать секретный ключ для аутентификации без ввода пароля. Если же вы установите пароль для ключей, то при входе вам нужно будет вводить и ключ, и этот пароль. Конечно, парольная фраза обеспечивает более надёжную защиту. Однако, принимая решение об использовании пароля для ключей, следует исходить из требований и целей сервера.
Команда создаст закрытый ключ (id_rsa) и открытый ключ (id_rsa.pub) в каталоге .ssh в домашнем каталоге пользователя localuser.
Важно! Закрытый ключ нельзя разглашать.
Копирование ключей
Сгенерировав SSH-ключи, скопируйте открытый ключ на новый сервер. Для этого существует два метода.
Метод 1: Сценарий ssh-copy-id
Если на локальной машине установлен сценарий ssh-copy-id, его можно использовать для установки открытого ключа для любого пользователя, чьи учётные данные вам известны.
Запустите сценарий ssh-copy-id, указав имя целевого пользователя и IP-адрес сервера.
ssh-copy-id 8host@SERVER_IP_ADDRESS
Укажите пароль пользователя, после чего открытый ключ будет добавлен в файл .ssh/authorized_keys удалённого пользователя.
Метод 2: Установка ключа вручную
Чтобы добавить ключ вручную, введите следующую команду в терминал локальной машины:
cat ~/.ssh/id_rsa.pub
Команда выведет на экран открытый ключ:
id_rsa.pub contents
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBGTO0tsVejssuaYR5R3Y/i73SppJAhme1dH7W2c47d4gOqB4izP0+fRLfvbz/tnXFz4iOP/H6eCV05hqUhF+KYRxt9Y8tVMrpDZR2l75o6+xSbUOMu6xN+uVF0T9XzKcxmzTmnV7Na5up3QM3DoSRYX/EP3utr2+zAqpJIfKPLdA74w7g56oYWI9blpnpzxkEd3edVJOivUkpZ4JoenWManvIaSdMTJXMy3MtlQhva+j9CgguyVbUkdzK9KKEuah+pFZvaugtebsU+bllPTB0nlXGIJk98Ie9ZtxuY3nCKneB+KjKiXrAvXUPCI9mWkYS/1rggpFmu3HbXBnWSUdf localuser@machine.local
Скопируйте ключ в буфер обмена.
Чтобы разрешить использование ключа SSH для аутентификации нового удаленного пользователя, нужно добавить открытый ключ в специальный файл в домашнем каталоге этого пользователя.
Перейдите на сервер в сессию пользователя root и введите следующую команду, чтобы временно перейти в сессию нового пользователя (не забудьте указать правильное имя):
su – 8host
Это откроет домашний каталог пользователя 8host.
Создайте новый каталог .ssh и ограничьте доступ к нему:
mkdir ~/.ssh
chmod 700 ~/.ssh
Откройте файл authorized_keys в каталоге .ssh:
nano ~/.ssh/authorized_keys
Вставьте в него открытый ключ. Нажмите CTRL-x, y и Enter, чтобы закрыть и сохранить файл.
Заблокируйте доступ к файлу authorized_keys:
chmod 600 ~/.ssh/authorized_keys
Чтобы вернуться в сессию root, введите:
exit
Итак, открытый ключ добавлен, и теперь SSH-ключи можно использовать для аутентификации.
Примечание: Больше информации о ключах – в руководстве «Как настроить SSH-ключи».
Отключение аутентификации на основе пароля
Теперь для аутентификации сервер использует SSH-ключи. Отключите аутентификацию на основе пароля. Это ограничит доступ к серверу, так как SSH-ключи станут единственным способом подключиться к нему.
Важно! Отключайте аутентификацию на основе пароля только в том случае, если добавили ключи и проверили их работу. В противном случае вы рискуете заблокировать себе доступ к собственному серверу!
В сессии пользователя root или 8host откройте настройки демона SSH.
sudo nano /etc/ssh/sshd_config
Найдите строку PasswordAuthentication, раскомментируйте её и измените значение на no.
PasswordAuthentication no
В этом файле есть ещё две настройки по умолчанию, важные для аутентификации на основе ключей. Если вы не изменяли их ранее, не изменяйте их:
PubkeyAuthentication yes
ChallengeResponseAuthentication no
Сохраните и закройте файл (Ctrl-X, Y, Enter).
Перезапустите SSH:
sudo systemctl reload sshd
Теперь аутентификация на основе пароля отключена. Получить доступ к серверу можно только при помощи SSH-ключей.
Тестирование настройки
Прежде чем прервать соединение с сервером, проверьте настройки.
Важно! Не отключайтесь от сервера, пока не убедитесь в том, что SSH-ключи работают.
На локальной машине откройте новый терминал и попробуйте подключиться к серверу.
ssh 8host@SERVER_IP_ADDRESS
Если ключи настроены правильно, на данном этапе для подключения будет использован закрытый ключ. Если же настройка не удалась, система запросит пароль. p>
Примечание: Если вы защитили ключи парольной фразой, сначала система запросит эту фразу, а затем уже выполнит аутентификацию при помощи ключей. Если парольной фразы нет, система сразу использует ключи.
После успешной аутентификации вы получите доступ к сессии пользователя 8host.
Чтобы запустить команду с правами root, начните её с sudo:
sudo command_to_run
Если проблема с постоянным разрывом SSH сессий присутствует только на одном определенном сервере, то тогда можно в его конфигурации sshd сделать небольшие изменения, чтобы решить эту проблему. Для этого открываем файл /etc/ssh/sshd_config и в самый низ конфигурации дописываем следующие настройки:
ClientAliveInterval 60
ClientAliveCountMax 5
ClientAliveInterval 60 – Данный параметр определяет как часто сервер, к которому вы подключены, будет отправлять на ваш компьтер (клиент) пакет, говорящий “я живой”. В нашем примере это будет происходить каждые 60 секунд.
ClientAliveCountMax 5 – Данный параметр определяет, сколько раз такой пакет “я живой” будет отправлен от сервера на ваш клиентский ПК, когда от вашего ПК не последовало ответа, прежде чем принудительно разорвать соединение. В нашем примере 5 раз.
С такими настройками сессия будет висеть 60 * 5 = 300 секунд, после чего автоматически оборвется (только в случае, когда клиент не отвечает 5 раз подряд).
После внесения изменений в конфиг, необходимо перезапустить службу sshd на сервере, сделать это можно следующей командой:
sudo service sshd restart