March 1

Шпаргалка по SSH

Это перевод оригинальной статьи SSH Cheat Sheet.

Подписывайтесь на телеграм-канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге.

Практическое, удобное для копирования и вставки руководство по SSH для инженеров Linux, системных администраторов, администраторов баз данных и SRE-специалистов.

Часть 1 — Основы SSH (для всех)

Основные принципы использования SSH

ssh user@server_ip

Подключитесь к удалённому серверу, используя стандартный порт 22.

ssh hostname

Используются параметры из ~/.ssh/config, если они определены.

SSH с пользовательским портом и пользователем

ssh -p 2222 user@server_ip

Укажите нестандартный порт SSH.

ssh user@hostname

Войдите в систему под конкретным пользователем.

Аутентификация по SSH-ключу

Сгенерируйте SSH-ключ

ssh-keygen -t ed25519

Скопируйте открытый ключ на сервер.

ssh-copy-id user@server_ip-copy-id user@server_ip

После этого ввод пароля при подключении больше не требуется.

Советы по работе с конфигурационными файлами SSH (настоятельно рекомендуется)

Редактировать конфигурацию:

nano ~/.ssh/config

Пример:

Host prod-db
  HostName 10.10.10.20
  User postgres
  Port 22
  IdentityFile ~/.ssh/id_ed25519

Подключение:

ssh prod-db

# Cleaner
# Faster
# Less mistakes

SSH-туннелирование и переадресация портов

Локальная переадресация портов

ssh -L 5432:localhost:5432 user@server_ip

Получите доступ к удаленной базе данных PostgreSQL так, будто он запущен локально.

Удалённая переадресация портов

ssh -R 9000:localhost:3000 user@server_ip

Предоставьте удаленному компьютеру доступ к локальному сервису.

Динамическая переадресация портов (SOCKS-прокси)

ssh -D 8080 user@server_ip

Полезно для безопасного просмотра веб-страниц и настройки прокси-серверов.

Копирование файлов с помощью SCP и RSYNC

Копирование файла на удаленный сервер

scp file.txt user@server_ip:/path/

Копирование директории

scp -r mydir user@server_ip:/path/

Более быстрый и надёжный способ (рекомендуется)

rsync -avz file.txt user@server_ip:/path/

Отладка SSH-подключений

ssh -v user@server_ip

Ещё больше деталей:

ssh -vvv user@server_ip

Проверьте, какой ключ используется:

ssh -i ~/.ssh/mykey user@server_ip

Лучшие практики безопасности

Отключить аутентификацию по паролю
Использовать SSH-ключи
Сменить стандартный порт
Использовать Fail2Ban
Ограничить доступ пользователей черезAllowUsers

Пример (sshd_config):

PasswordAuthentication no
PermitRootLogin no

Перезапустите SSH:

sudo systemctl restart sshd

Часть 2 — Объяснение параметров SSH (от новичка до продвинутого)

В этом разделе простыми словами объясняются параметры командной строки SSH. Для понимания этой части вам не потребуются предварительные знания SSH.

Напоминание о базовом синтаксисе

ssh [options] user@host
  • user → имя пользователя удаленного Linux
  • host → IP-адрес или имя хоста сервера
  • options → параметры поведения SSH (что мы объясним ниже)

Основные и наиболее часто используемые опции (необходимо знать)

-p → Порт

ssh -p 2222 user@server

Подключение к пользовательскому SSH-порту.
Порт SSH по умолчанию = 22.
Часто меняется из соображений безопасности

Представьте, что порт — это номер двери на сервере.

-l → Имя пользователя

ssh -l postgres server_ip

Указывает, от имени какого пользователя следует войти в систему. То
же самое, что и:

ssh postgres@server_ip

-i → Файл идентификации (SSH-ключ)

ssh -i ~/.ssh/id_ed25519 user@server

Указывает SSH, какой закрытый ключ использовать.
Полезно, когда у вас несколько ключей SSH.

-v, -vv, -vvv → Подробный режим / Режим отладки

ssh -v user@server

Отображает этапы подключения.
Помогает отлаживать:

  • проблемы аутентификации
  • неправильные ключи
  • сетевые ошибки

Чем больше v, тем больше деталей.

-F → Пользовательский файл конфигурации

ssh -F myconfig user@server

Используйте нестандартный файл конфигурации SSH.
По умолчанию используется:

~/.ssh/config

Параметры аутентификации и безопасности

-o → Пользовательская опция SSH

ssh -o StrictHostKeyChecking=no user@server

Передайте любые расширенные настройки SSH вручную.
Эквивалентно параметрам из ssh_config

Частые примеры:

-o PasswordAuthentication=no
-o ConnectTimeout=5

-A → Переадресация агента SSH

ssh -A user@server

Переадресация локальных SSH-ключей на удаленный сервер.
Используется для промежуточных серверов.

Использовать с осторожностью (риск безопасности на ненадежных серверах).

-a → Отключить переадресацию агента

ssh -a user@server

Более безопасный вариант по умолчанию:
Явно отключает переадресацию ключей.

-K → Аутентификация GSSAPI

ssh -K user@server

Используется в средах Kerberos / корпоративных средах.

Переадресация и туннелирование

-L → Переадресация локальных портов

ssh -L 5432:localhost:5432 user@server

Доступ к удалённому сервису локально.
Очень распространён в:

  • PostgreSQL
  • MySQL
  • Веб-приложения

-R → Удалённая переадресация портов

ssh -R 8080:localhost:3000 user@server

Предоставить удалённому серверу доступ к локальному сервису

-D → Динамическая переадресация портов (SOCKS-прокси)

ssh -D 1080 user@server

Создает SOCKS-прокси.
Используется для:

  • безопасного просмотр
  • туннелирования трафика

-W → Переадресация стандартного ввода/вывода

ssh -W host:port user@server

В основном используется с ProxyJump.

Jump-хосты и несколько серверов

-J → Jump Host (Bastion Server)

ssh -J user@jumpserver user@target

Подключение через другой сервер.
Современная альтернатива сложным туннелям.

Управление сессией

-N → без выполнения команд

ssh -N -L 5432:localhost:5432 user@server

Только открытый туннель.
Доступ к оболочке запрещен.

-T → Отключить псевдо-TTY

ssh -T user@server

Используется в скриптах.
Нет интерактивного терминала.

-t → Принудительно включить TTY

ssh -t user@server "sudo systemctl restart postgresql"

Необходимо для sudo.

Фон и управление

-f → Фоновый режим

ssh -f -N -L 5432:localhost:5432 user@server

Запуск SSH в фоновом режиме.
Идеально подходит для туннелей.

-S → control socket

ssh -S /tmp/ssh.sock user@server

Используется при совместным использованием соединений.

-O → Команды управления

ssh -O exit user@server

Управление существующим SSH-соединением

Шифрование и алгоритмы

-c → Шифр

ssh -c aes256-gcm@openssh.com user@server

Выберите алгоритм шифрования

-m → MAC-алгоритм

ssh -m hmac-sha2-256 user@server

алгоритм аутентификации сообщений

-Q → Запрос поддерживаемых алгоритмов

ssh -Q cipher
ssh -Q mac

Выводит список поддерживаемых алгоритмов.

Параметры сетевого уровня

-B → Привязка к сетевому интерфейсу

ssh -B eth0 user@server

Принудительно направляет SSH-трафик через указанный сетевой интерфейс.

-b → Исходный адрес

ssh -b 192.168.1.10 user@server

Использует конкретный локальный IP-адрес в качестве источника соединения.

Золотое правило (совет для новичков)

Если команда SSH кажется длинной или пугающей, перенесите её в ~/.ssh/config и упростите себе жизнь.

SSH — это больше, чем просто способ подключения к серверу; это мощный инструмент для безопасного доступа, автоматизации и устранения неполадок. Если вы понимаете основы, вы можете безопасно управлять любой системой Linux. Если вы освоите параметры, вы сможете уверенно работать со сложными конфигурациями, такими как туннели, бастионные хосты и производственные среды.

На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.