Я не знаю, зачем вам понадобился удаленный сервер. Вне зависимости от целей использования алгоритм базовой настройки работы по SSH будет един. Сейчас расскажу.
Я задумал эту заметку как часть статьи “Деплой в Docker Swarm”, однако она полезна и как самостоятельный материал.
0. Получаем сервер
Для начала, конечно, нужно получить этот самый удаленный сервер. Сделать это можно у вашего любимого хостинг-провайдера. Не буду упоминать и рекомендовать никакой конкретный.
По итогу, в самом простом варианте, от хостинг-провайдера вы получите 2 вещи: ip адрес вашего сервера и пароль пользователя root
. Чтобы начать взаимодействовать с сервером этого будет достаточно. Все остальное можно настроить самостоятельно.
Возможно, некоторые более продвинутые сервисы сами заведут отдельного пользователя на вашем сервере. В таком случае работа упростится. Тут же я опишу процесс настройки с нуля. Только ip и пароль от root
, только хардкор.
Подключаемся
Как будем подключаться? Из терминала, по SSH.
SSH (Secure SHell) — это зашифрованный сетевой протокол, посредством которого два компьютера могут взаимодействовать и обмениваться данными. С помощью ssh можно подключаться к удаленным серверам, выполнять на них команды, копировать и редактировать файлы.
Пакет openssh
входит в большинство дистрибутивов Linux по умолчанию. Если по он отсутствует в вашей системе, вы можете установить его самостоятельно.
Далее в терминале на локальном компьютере выполняем команду
ssh root@<ip>
где <ip>
— ip адрес вашего сервера, полученный от хостинг-провайдера.
Нужно будет ввести пароль от пользователя root
(его даст хостинг-провайдер)
Итак, мы на сервере.
Обновление Ubuntu
Если на вашем удаленном сервере стоит Ubuntu, возможно, при входе появится уведомление, что доступна более новая версия. Делаем:
do-release-upgrade
После завершения обновления стоит перезагрузить сервер. Сделать это можно в админке на сайте (если там есть нужная кнопка), либо командой
reboot
или
shutdown -r now
на самом сервере.
После перезагрузки нужно будет повторно авторизоваться.
1. Создание пользователя
Работать от имени 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
2.1 Авторизация по ключам
Для начала настроим авторизацию по паре “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 Ограничения
Теперь необходимо донастроить 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 Авторизуемся
После всех описанных настроек с локального компа на сервер нужно будет подключаться командой
ssh www@<host-name>
где:
www
— имя пользователя, для которого мы всё настраивали<host-name>
— имя сервера, которое мы задали в конфиге~/.ssh/config
Далее нужно будет ввести пароль от SSH-ключа, если вы его задавали при создании ключа.
3. Софт
Все описываемые далее действия выполняются от имени пользователя www
.
0. Обновляемся
sudo apt-get update
sudo apt-get upgrade
Для использования команды sudo нужно будет ввести пароль пользователя www
. Мы задавали его при создании пользователя.
1. Устанавливаем всякое
Конечно, набор софта у каждого будет свой. Тут отмечу утилиту htop
— она весьма полезна для мониторинга процессов.
sudo apt-get install htop
Подробнее о мониторинге ресурсов в следующем разделе.
Docker
Отдельно хочу рассмотреть процесс установки и запуска 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. Мониторинг ресурсов
Я составил целую подборку утилит для отслеживания состояния системы — “Linux-утилиты #1: мониторинг состояния системы.” Здесь же я упомяну только самые основные. Скорее всего, они будут установлены на любом сервере по умолчанию
free -ht
— выводит информацию о занятости оперативной памяти.-h
— вывод в удобочитаемом формате,-t
— вывод totaldf -h
— выводит информацию о занятости диска.-h
— вывод в удобочитаемом форматеuptime
— время работы системы с момента последнего старта. Загрузка CPUtop
или её продвинутый аналогhtop
— выводит распределение нагрузки по ядрам CPU, использование оперативной памяти, загрузку процессора, uptime, а так же список запущенных процессов и потребляемые ими ресурсы
5. Встречающиеся ошибки
Failed to fetch http://mirror.yandex.ru/…
Ошибка:
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
Итог
Тут я описал процесс базовой настройки ssh для комфортной и безопасной работы с удаленной сервером. Конечно, далее вы можете усложнять настройки и конфигурировать службы под ваши нужды.
Можно прокачивать и безопасность работы по SSH. Настроить port knocking, и/или другие способы защиты.
Теперь можно начинать использовать сервер для ваших нужд. Например, деплоить на нём свои сервисы в Docker Swarm.