Обзор
В этой статье рассматриваются базовые концепции и ключевые сценарии использования SSH (Secure Shell) — незаменимого инструмента для администрирования серверов Linux и удаленной работы. В ней наглядно и пошагово представлены практические команды терминала: от установки клиентского пакета и базового удаленного подключения до безопасной генерации пары SSH-ключей, настройки беспарольной аутентификации, использования удобных профилей SSH config и методов проброса портов (порт-форвардинга).
1. Проверка SSH-клиента и базовое удаленное подключение
Для выполнения практических заданий по удаленному подключению по SSH установим пакет 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 -p 22 -o ConnectTimeout=5 [email protected] пытается установить соединение с указанным удаленным хостом, используя порт 22 и таймаут подключения 5 секунд.
Это предотвращает бесконечное ожидание при сетевых задержках и позволяет быстро проверить статус подключения.

2. Генерация пары SSH-ключей (Key Pair) и безопасная настройка прав доступа
Подготовим каталог для безопасного хранения файлов 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, с помощью команды chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub установим права доступа к файлам: чтение и запись только для владельца для закрытого ключа, и общедоступное чтение для открытого ключа.

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

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

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

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

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

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

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

5. Выполнение одиночных команд SSH и туннелирование для повышения продуктивности удаленной работы
Команда ssh -V проверяет информацию о версии клиента OpenSSH, установленного в текущей системе.

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

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

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