Глиф Учебники

Урок 7. SSH — удалённый доступ к серверу

Курс «Ubuntu» · урок 7 из 8 · 5 минут чтения

SSH — способ управлять компьютером через сеть: вы набираете команды у себя, а выполняются они на сервере. Соединение зашифровано, поэтому пароль и команды никто по дороге не прочитает. Почти все серверы на Linux управляются именно так.

У SSH две стороны: сервер (программа sshd на машине, которой управляют) и клиент (команда ssh на вашем компьютере).

команды ответы Ваш компьютер клиент — команда ssh $ ssh ivan@ 192.168.1.10 Сервер Ubuntu сервер — служба sshd ждёт на порту 22 ivan@server:~$
Клиент ssh на вашем компьютере подключается к службе sshd сервера по порту 22; команды и ответы идут по зашифрованному каналу.

Включите сервер SSH

В Ubuntu Server сервер SSH обычно ставят ещё при установке системы — там есть отметка «Install OpenSSH server». Проверить и поставить, если его нет:

Bash
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 — норма.

Узнайте адрес сервера в сети — он понадобится для подключения:

Bash
ip -4 addr show

Нужен адрес вида 192.168.1.10 у сетевой карты (не 127.0.0.1 — это сам компьютер).

Подключитесь

В Linux, macOS и Windows 10/11 клиент уже есть: откройте терминал (в Windows — PowerShell) и наберите имя пользователя на сервере и адрес:

Bash
ssh ivan@192.168.1.10

При первом подключении SSH показывает отпечаток ключа сервера и спрашивает, доверять ли ему. Ответьте yes — отпечаток запомнится. Если однажды он изменится, SSH предупредит: так видна подмена сервера. Дальше — пароль пользователя на сервере, и приглашение терминала сменится на серверное. Выход — команда exit.

Если сервер слушает другой порт, его указывают ключом -p:

Bash
ssh -p 2222 ivan@192.168.1.10

Вход по ключу

Пароль можно подобрать, ключ — практически нельзя. Ключ — это пара файлов: закрытый остаётся у вас и никому не передаётся, открытый кладётся на сервер.

Создайте пару на своём компьютере (не на сервере):

Bash
ssh-keygen -t ed25519

Программа спросит, куда сохранить ключ (Enter — на место по умолчанию, ~/.ssh/id_ed25519), и предложит задать фразу-пароль. Фраза защищает ключ, если кто-то скопирует файл, — лучше задать.

Отправьте открытый ключ на сервер. Как — зависит от системы на вашем компьютере:

Linux или macOSкомандой ssh-copy-id

Bash
ssh-copy-id ivan@192.168.1.10

Команда спросит пароль пользователя на сервере и допишет ключ в его файл ~/.ssh/authorized_keys.

Windowsвручную

Команды ssh-copy-id в Windows нет, ключ переносят сами:

  1. Откройте в Блокноте файл C:\Users\<имя>\.ssh\id_ed25519.pub (вместо <имя> — ваше имя пользователя Windows) и скопируйте его единственную строку.
  2. Подключитесь к серверу по паролю: ssh ivan@192.168.1.10.
  3. На сервере выполните команды ниже. Когда nano откроет ~/.ssh/authorized_keys, вставьте строку ключа отдельной строкой, сохраните — Ctrl+O, Enter — и выйдите: Ctrl+X. Файла может ещё не быть — nano создаст его.
Bash
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Права должны быть строгими — 700 у папки и 600 у файла, иначе SSH файл не примет.

Теперь ssh ivan@192.168.1.10 пускает без пароля пользователя (спросит только фразу ключа, если она есть).

Ваш компьютер ~/.ssh/ ssh-keygen -t ed25519 id_ed25519 закрытый ключ id_ed25519.pub открытый ключ не покидает компьютер ssh-copy-id ivan@192.168.1.10 Сервер ~/.ssh/ ssh ivan@192.168.1.10 пускает по ключу, без пароля authorized_keys ssh-ed25519 AAAA…
Закрытый ключ id_ed25519 остаётся на вашем компьютере, а открытый id_ed25519.pub команда ssh-copy-id дописывает на сервер в ~/.ssh/authorized_keys.

Отключите вход по паролю

Когда вход по ключу работает, вход по паролю лучше закрыть — тогда подбор пароля бесполезен. Настройки сервера — в файле /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):

Bash
sudo nano /etc/ssh/sshd_config.d/10-no-password.conf

С одной строкой:

Настройки
PasswordAuthentication no

Проверьте настройки и перезапустите сервер:

Bash
sudo sshd -t
sudo systemctl restart ssh

sshd -t ничего не выводит, если ошибок нет.

Не закрывайте текущее соединение, пока не проверили вход по ключу из второго окна терминала. Если ключ не подошёл, а пароль уже выключен, войти на сервер можно будет только с его клавиатуры или через консоль хостинга.

В настройках SSH действует первое найденное значение, а файлы из sshd_config.d читаются раньше основного файла. Поэтому своя строка в sshd_config.d главнее строки в sshd_config. Но если там уже есть файл с PasswordAuthentication yes (так бывает в облачных образах — 50-cloud-init.conf), имя своего файла должно идти по алфавиту раньше — отсюда 10- в начале.

/etc/ssh/sshd_config Include /etc/ssh/sshd_config.d/*.conf sshd_config.d/10-no-password.conf PasswordAuthentication no действует sshd_config.d/50-cloud-init.conf PasswordAuthentication yes не действует /etc/ssh/sshd_config — остальные строки PasswordAuthentication yes не действует 1 2 3 4
Файлы из sshd_config.d читаются по алфавиту и раньше остальных строк sshd_config, поэтому действует PasswordAuthentication no из файла 10-no-password.conf.

Частые ошибки

Коротко

Проверьте себя

1. Какой пакет ставит сервер SSH в Ubuntu?
2. Где создают пару ключей для входа на сервер?
3. Когда безопасно выключить вход по паролю?
4. Что значит ошибка Connection refused?