Полное практическое руководство по SSH в Ubuntu

Обзор

В этой статье рассматриваются базовые концепции и ключевые сценарии использования SSH (Secure Shell) — незаменимого инструмента для администрирования серверов Linux и удаленной работы. В ней наглядно и пошагово представлены практические команды терминала: от установки клиентского пакета и базового удаленного подключения до безопасной генерации пары SSH-ключей, настройки беспарольной аутентификации, использования удобных профилей SSH config и методов проброса портов (порт-форвардинга).

1. Проверка SSH-клиента и базовое удаленное подключение

Для выполнения практических заданий по удаленному подключению по SSH установим пакет openssh-client и обновим его до актуального состояния.

apt-get update -qq && apt-get install -y openssh-client

Команда ssh -V проверяет информацию о версии клиента OpenSSH, установленного в системе.
⚙️ [Основные опции]

-p : указывает нестандартный номер порта удаленного сервера вместо стандартного 22.
-i : задает путь к файлу закрытого ключа (Private Key) для аутентификации вместо ввода пароля.
-v : выводит отладочные сообщения для подробного анализа процесса подключения и причин возможных неполадок.
-C : включает сжатие при передаче данных для экономии пропускной способности сети.
-o : позволяет передавать параметры конфигурации (например, ConnectTimeout), обычно определяемые в файле ~/.ssh/config, прямо через командную строку.
-L : настраивает локальный проброс портов (Local Port Forwarding) для перенаправления трафика к службам удаленной сети.
-R : настраивает удаленный проброс портов (Remote Port Forwarding) для доступа с удаленного сервера к локальным службам.

ssh -V

Команда ssh -p 22 -o ConnectTimeout=5 [email protected] пытается установить соединение с указанным удаленным хостом, используя порт 22 и таймаут подключения 5 секунд.
Это предотвращает бесконечное ожидание при сетевых задержках и позволяет быстро проверить статус подключения.

ssh -p 22 -o ConnectTimeout=5 testuser@127.0.0.1 || true

2. Генерация пары SSH-ключей (Key Pair) и безопасная настройка прав доступа

Подготовим каталог для безопасного хранения файлов SSH-ключей и ограничим к нему доступ, разрешив его только владельцу с помощью команды mkdir -p ~/.ssh && chmod 700 ~/.ssh.

mkdir -p ~/.ssh && chmod 700 ~/.ssh

Команда ssh-keygen -t ed25519 -C 'lab-demo@ubuntu' -f ~/.ssh/id_ed25519 -N '' генерирует новую пару SSH-ключей без кодовой фразы (passphrase), используя современный криптографический стандарт — алгоритм Ed25519.
По результатам выполнения команды можно убедиться, что закрытый ключ (id_ed25519), открытый ключ (id_ed25519.pub) и уникальный отпечаток ключа (fingerprint) были успешно созданы.

ssh-keygen -t ed25519 -C ’lab-demo@ubuntu’ -f ~/.ssh/id_ed25519 -N ‘’

Чтобы соответствовать строгим требованиям безопасности демона SSH, с помощью команды chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub установим права доступа к файлам: чтение и запись только для владельца для закрытого ключа, и общедоступное чтение для открытого ключа.

chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub

Команда ls -la ~/.ssh подробно отображает список созданных файлов в каталоге и примененные к ним права доступа.
Вывод подтверждает, что необходимые права установлены корректно: каталог .ssh имеет права drwx------ (700), закрытый ключ — -rw------- (600), а открытый ключ — -rw-r--r-- (644).

ls -la ~/.ssh

3. Регистрация открытого ключа для беспарольного входа (ssh-copy-id)

Создадим файл для хранения открытых ключей, используемых для удаленного входа, и ограничим права доступа только для чтения и записи владельцем с помощью команды touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys.

touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys

Чтобы добавить содержимое созданного ранее открытого ключа в список авторизованных ключей, выполним команду cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys.

cat ~/.ssh/id_ed25519.pub » ~/.ssh/authorized_keys

Команда ssh-keygen -l -f ~/.ssh/authorized_keys проверяет корректность добавления открытого ключа, отображая информацию об отпечатках зарегистрированных ключей.
Вывод подтверждает, что 256-битный открытый ключ Ed25519 и указанный при создании комментарий (lab-demo@ubuntu) зарегистрированы правильно.

ssh-keygen -l -f ~/.ssh/authorized_keys

4. Упрощение сложных команд подключения с помощью файла конфигурации SSH Config

Чтобы подключаться по простому псевдониму (alias) вместо ввода длинных параметров подключения, определим IP-адрес удаленного хоста, имя пользователя, номер порта и путь к ключу аутентификации в файле ~/.ssh/config.

cat « ‘EOF’ > ~/.ssh/config
Host dev-server
HostName 127.0.0.1
User testuser
Port 22
IdentityFile ~/.ssh/id_ed25519
EOF

Чтобы предотвратить отклонение файла конфигурации SSH-клиентом из-за небезопасных прав, с помощью команды chmod 600 ~/.ssh/config настроим права так, чтобы только владелец мог читать и изменять этот файл.

chmod 600 ~/.ssh/config

Команда cat ~/.ssh/config выводит содержимое созданного конфигурационного файла SSH-клиента для проверки настроек.
Вывод подтверждает, что имя хоста, учетная запись пользователя, порт и данные закрытого ключа для псевдонима dev-server сохранены в точности так, как задумывалось.

cat ~/.ssh/config

5. Выполнение одиночных команд SSH и туннелирование для повышения продуктивности удаленной работы

Команда ssh -V проверяет информацию о версии клиента OpenSSH, установленного в текущей системе.

ssh -V

Команда ssh -o BatchMode=yes -o ConnectTimeout=2 [email protected] 'uname -a; df -h' || true выполняет команды проверки информации о системе и использования дискового пространства непосредственно на удаленном хосте без входа в интерактивную командную оболочку, после чего возвращает результат.
Отключение ожидания ввода пароля позволяет безопасно выполнять одиночные команды в сценариях автоматизации и пакетных заданиях.

ssh -o BatchMode=yes -o ConnectTimeout=2 testuser@127.0.0.1 ‘uname -a; df -h’ || true

Команда ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 [email protected] || true выполняет локальный проброс портов (Local Port Forwarding), создавая в фоновом режиме защищенный зашифрованный туннель без запуска удаленной команды и связывая локальный порт 8080 с портом 80 удаленного сервера.
Это позволяет безопасно обращаться через локальный порт к внутренним веб-сервисам или базам данных на удаленном сервере, к которым нет прямого доступа извне.

ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 testuser@127.0.0.1 || true

В этом материале мы пошагово рассмотрели работу с SSH в среде Ubuntu: от базового удаленного подключения до повышения безопасности с помощью беспарольного входа по ключам и полезных приемов проброса портов.
Надеемся, что освоенные на практике навыки работы с SSH помогут вам построить еще более безопасную и удобную среду администрирования удаленных серверов.