Урок 7. SSH — удалённый доступ к серверу
SSH — способ управлять компьютером через сеть: вы набираете команды у себя, а выполняются они на сервере. Соединение зашифровано, поэтому пароль и команды никто по дороге не прочитает. Почти все серверы на Linux управляются именно так.
У SSH две стороны: сервер (программа sshd на машине, которой управляют) и клиент (команда ssh на вашем компьютере).
Включите сервер SSH
В Ubuntu Server сервер SSH обычно ставят ещё при установке системы — там есть отметка «Install OpenSSH server». Проверить и поставить, если его нет:
sudo apt update
sudo apt install openssh-server
sudo ss -tlnПоследняя команда показывает порты, которые ждут подключений: в списке должна быть строка с :22 — это порт SSH. Состояние самой службы показывает sudo systemctl status ssh (выход из просмотра — клавиша q). С Ubuntu 22.10 служба запускается при первом подключении, поэтому до него inactive с пометкой TriggeredBy: ssh.socket — норма.
Узнайте адрес сервера в сети — он понадобится для подключения:
ip -4 addr showНужен адрес вида 192.168.1.10 у сетевой карты (не 127.0.0.1 — это сам компьютер).
Подключитесь
В Linux, macOS и Windows 10/11 клиент уже есть: откройте терминал (в Windows — PowerShell) и наберите имя пользователя на сервере и адрес:
ssh ivan@192.168.1.10При первом подключении SSH показывает отпечаток ключа сервера и спрашивает, доверять ли ему. Ответьте yes — отпечаток запомнится. Если однажды он изменится, SSH предупредит: так видна подмена сервера. Дальше — пароль пользователя на сервере, и приглашение терминала сменится на серверное. Выход — команда exit.
Если сервер слушает другой порт, его указывают ключом -p:
ssh -p 2222 ivan@192.168.1.10Вход по ключу
Пароль можно подобрать, ключ — практически нельзя. Ключ — это пара файлов: закрытый остаётся у вас и никому не передаётся, открытый кладётся на сервер.
Создайте пару на своём компьютере (не на сервере):
ssh-keygen -t ed25519Программа спросит, куда сохранить ключ (Enter — на место по умолчанию, ~/.ssh/id_ed25519), и предложит задать фразу-пароль. Фраза защищает ключ, если кто-то скопирует файл, — лучше задать.
Отправьте открытый ключ на сервер. Как — зависит от системы на вашем компьютере:
Linux или macOSкомандой ssh-copy-id
ssh-copy-id ivan@192.168.1.10Команда спросит пароль пользователя на сервере и допишет ключ в его файл ~/.ssh/authorized_keys.
Windowsвручную
Команды ssh-copy-id в Windows нет, ключ переносят сами:
- Откройте в Блокноте файл
C:\Users\<имя>\.ssh\id_ed25519.pub(вместо<имя>— ваше имя пользователя Windows) и скопируйте его единственную строку. - Подключитесь к серверу по паролю:
ssh ivan@192.168.1.10. - На сервере выполните команды ниже. Когда nano откроет
~/.ssh/authorized_keys, вставьте строку ключа отдельной строкой, сохраните —Ctrl+O,Enter— и выйдите:Ctrl+X. Файла может ещё не быть — nano создаст его.
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysПрава должны быть строгими — 700 у папки и 600 у файла, иначе SSH файл не примет.
Теперь ssh ivan@192.168.1.10 пускает без пароля пользователя (спросит только фразу ключа, если она есть).
Отключите вход по паролю
Когда вход по ключу работает, вход по паролю лучше закрыть — тогда подбор пароля бесполезен. Настройки сервера — в файле /etc/ssh/sshd_config и в файлах папки /etc/ssh/sshd_config.d/: папку подключает строка Include /etc/ssh/sshd_config.d/*.conf в начале главного файла (в Ubuntu 20.04 и новее она есть, проверка — grep Include /etc/ssh/sshd_config; если строки нет — см. справку Вход root по SSH). Создайте свой файл — его ещё нет, nano создаст его при сохранении (Ctrl+O, Enter, выход — Ctrl+X):
sudo nano /etc/ssh/sshd_config.d/10-no-password.confС одной строкой:
PasswordAuthentication noПроверьте настройки и перезапустите сервер:
sudo sshd -t
sudo systemctl restart sshsshd -t ничего не выводит, если ошибок нет.
Не закрывайте текущее соединение, пока не проверили вход по ключу из второго окна терминала. Если ключ не подошёл, а пароль уже выключен, войти на сервер можно будет только с его клавиатуры или через консоль хостинга.
В настройках SSH действует первое найденное значение, а файлы из sshd_config.d читаются раньше основного файла. Поэтому своя строка в sshd_config.d главнее строки в sshd_config. Но если там уже есть файл с PasswordAuthentication yes (так бывает в облачных образах — 50-cloud-init.conf), имя своего файла должно идти по алфавиту раньше — отсюда 10- в начале.
Частые ошибки
Connection refused— сервер SSH не запущен или слушает другой порт. Проверьтеsudo systemctl status ssh.Connection timed out— до сервера не доходит: неверный адрес, сервер выключен или порт закрыт брандмауэром (как открыть — в справке Как открыть порт в Ubuntu).Permission denied (publickey)— сервер не принимает пароли, а ключа у вас нет или он не тот.WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED— отпечаток сервера другой. После переустановки сервера это нормально: удалите старую запись командойssh-keygen -R 192.168.1.10. Если сервер не переустанавливали — не подключайтесь и выясните причину.
Коротко
- Сервер SSH — пакет
openssh-server, службаssh; клиентsshесть в Linux, macOS и Windows 10/11. - Подключение —
ssh пользователь@адрес, другой порт —-p. - Ключ создаётся у себя (
ssh-keygen -t ed25519), открытая часть — на сервер (ssh-copy-id). - Вход по паролю выключается строкой
PasswordAuthentication no— только после проверки входа по ключу. - Вход под root по SSH — отдельная тема: Вход root по SSH.