Настройка SSH на удаленном сервере

Я не знаю, зачем вам понадобился удаленный сервер. Вне зависимости от целей использования алгоритм базовой настройки работы по SSH будет един. Сейчас расскажу.

Я задумал эту заметку как часть статьи “Деплой в Docker Swarm”, однако она полезна и как самостоятельный материал.

0. Получаем сервер copy

Для начала, конечно, нужно получить этот самый удаленный сервер. Сделать это можно у вашего любимого хостинг-провайдера. Не буду упоминать и рекомендовать никакой конкретный.

По итогу, в самом простом варианте, от хостинг-провайдера вы получите 2 вещи: ip адрес вашего сервера и пароль пользователя root. Чтобы начать взаимодействовать с сервером этого будет достаточно. Все остальное можно настроить самостоятельно.

Возможно, некоторые более продвинутые сервисы сами заведут отдельного пользователя на вашем сервере. В таком случае работа упростится. Тут же я опишу процесс настройки с нуля. Только ip и пароль от root, только хардкор.

Подключаемся copy

Как будем подключаться? Из терминала, по SSH.

SSH (Secure SHell) — это зашифрованный сетевой протокол, посредством которого два компьютера могут взаимодействовать и обмениваться данными. С помощью ssh можно подключаться к удаленным серверам, выполнять на них команды, копировать и редактировать файлы.

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

Далее в терминале на локальном компьютере выполняем команду

ssh root@<ip>

где <ip> — ip адрес вашего сервера, полученный от хостинг-провайдера.

Нужно будет ввести пароль от пользователя root (его даст хостинг-провайдер)

Итак, мы на сервере.

Обновление Ubuntu copy

Если на вашем удаленном сервере стоит Ubuntu, возможно, при входе появится уведомление, что доступна более новая версия. Делаем:

do-release-upgrade

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

reboot

или

shutdown -r now

на самом сервере.

После перезагрузки нужно будет повторно авторизоваться.

1. Создание пользователя copy

Работать от имени root пользователя — не всегда хорошая идея. Если нужно объяснять, то не нужно объяснять. Создадим отдельного пользователя www, от имени которого будем заходить на сервер.

Все команды в этом разделе выполняются от имени пользователя root.

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

useradd -s /bin/bash -m www

и задаём ему пароль:

passwd www

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

usermod -a -G sudo www

Подробнее о создании пользователей можно почитать в этой статье.

Список всех пользователей лежит в файле /etc/passwd и посмотреть его можно командой:

less /etc/passwd

Удалить пользователя с логином www:

userdel -fr www
  • -f — принудительное удаление (даже если пользователь залогинен)
  • -r — удалить домашнюю директорию пользователя и его файлы в системе

Подробнее об удалении пользователей можно почитать в этой статье.

2. Настройка SSH copy

2.1 Авторизация по ключам copy

Для начала настроим авторизацию по паре “SSH-ключ + пароль от ключа” вместо авторизации по логину + паролю пользователя.

Ключ можно рассматривать как тестовый файл, содержащий длинную последовательность символов.

1. Создаём ключи

На локальной машине выполняем команду

ssh-keygen -t ed25519

Вводим название для файлов с ключами (можно оставить дефолтное). Затем вводим пароль от ключа (можно оставить пустым, но лучше задать). Этот пароль нужно будет вводить при использовании ключа.

Сгенерированные ключи будут лежать в ~/.ssh/

Файлы с ключами можно переименовать:

mv id_ed25519.pub work_key.pub
mv id_ed25519 work_key

2. Закидываем публичный ключ на сервер

ssh-copy-id -i ~/.ssh/work_key.pub www@<ip>

где:

  • ~/.ssh/work_key.pub — путь до публичного ключа на локальной машине
  • www — имя юзера, для которого будет добавлен ключ
  • <ip> — адрес вашего сервера

3. Настраиваем ssh на локальной машине

Для этого нужно отредактировать (или создать) файл ~/.ssh/config; добавить в него следующие строки:

Host <host-name>
	HostName <ip>
	User www
	IdentityFile ~/.ssh/work_key

где:

  • <host-name> — произвольное имя сервера (алиас)
  • <ip> — адрес вашего сервера
  • www — имя юзера, для которого будет добавлен ключ
  • ~/.ssh/work_key — путь до приватного ключа на локальной машине

2.2 Ограничения copy

Теперь необходимо донастроить SSH на сервере. Для этого авторизуемся под root-пользователем.

1. Настраиваем sshd

Редактируем файл /etc/ssh/sshd_config — добавляем в конец или меняем, если есть, строки:

PasswordAuthentication no  # Запрещаем авторизацию по паролю
PermitRootLogin no  # Запрещаем авторизацию от имени root-пользователя
AllowUsers www  # Список пользователей, которые могут заходить на сервер по ssh

На одном из серверов, с которым я работал, помимо основного конфига был ещё файл /etc/ssh/sshd_config.d/50-cloud-init.conf. Если он есть, в нём нужно так же запретить авторизацию по паролю

PasswordAuthentication no

2. Перезагружаем sshd

service sshd restart

3. Перезагружаем сервер

На всякий случай)

reboot

2.3 Авторизуемся copy

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

ssh www@<host-name>

где:

  • www — имя пользователя, для которого мы всё настраивали
  • <host-name> — имя сервера, которое мы задали в конфиге ~/.ssh/config

Далее нужно будет ввести пароль от SSH-ключа, если вы его задавали при создании ключа.

3. Софт copy

Все описываемые далее действия выполняются от имени пользователя www.

0. Обновляемся

sudo apt-get update
sudo apt-get upgrade

Для использования команды sudo нужно будет ввести пароль пользователя www. Мы задавали его при создании пользователя.

1. Устанавливаем всякое

Конечно, набор софта у каждого будет свой. Тут отмечу утилиту htop — она весьма полезна для мониторинга процессов.

sudo apt-get install htop

Подробнее о мониторинге ресурсов в следующем разделе.

Docker copy

Отдельно хочу рассмотреть процесс установки и запуска Docker.

Официальная документация. Продублирую:

Раз

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

Два

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

Три

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Четыре

sudo chmod 666 /var/run/docker.sock
sudo usermod -aG docker $USER

Пять

sudo systemctl enable docker
sudo systemctl start docker

4. Мониторинг ресурсов copy

Я составил целую подборку утилит для отслеживания состояния системы — “Linux-утилиты #1: мониторинг состояния системы.” Здесь же я упомяну только самые основные. Скорее всего, они будут установлены на любом сервере по умолчанию

  • free -ht — выводит информацию о занятости оперативной памяти. -h — вывод в удобочитаемом формате, -t — вывод total
  • df -h — выводит информацию о занятости диска. -h — вывод в удобочитаемом формате
  • uptime — время работы системы с момента последнего старта. Загрузка CPU
  • top или её продвинутый аналог htop — выводит распределение нагрузки по ядрам CPU, использование оперативной памяти, загрузку процессора, uptime, а так же список запущенных процессов и потребляемые ими ресурсы

5. Встречающиеся ошибки copy

Failed to fetch http://mirror.yandex.ru/copy

Ошибка:

E: Failed to fetch http://mirror.yandex.ru/ubuntu/pool/main/h/htop/htop_2.2.0-2build1_amd64.deb Temporary failure resolving 'mirror.yandex.ru'

Решение:

echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null

Ссылка

Итог copy

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

Можно прокачивать и безопасность работы по SSH. Настроить port knocking, и/или другие способы защиты.

Теперь можно начинать использовать сервер для ваших нужд. Например, деплоить на нём свои сервисы в Docker Swarm.

читайте также