Освоение SSH: Ваше незаменимое руководство по командной строке

Изучите практические команды SSH для входа в систему, работы с ключами, передачи файлов, перенаправления портов и настройки многократно используемых хостов.

Освоение SSH: Ваше основное руководство по командной строке

Протокол Secure Shell (SSH) предоставляет зашифрованный способ входа в удаленные системы, выполнения команд и передачи файлов. Если вы управляете серверами, несколько привычек работы с командной строкой SSH сделают вашу работу быстрее и безопаснее.

Это руководство охватывает команды, которые вы будете использовать чаще всего: удаленный вход, аутентификация по ключам, scp, sftp, локальное перенаправление портов и псевдонимы в ~/.ssh/config.

Установление безопасного удаленного входа

Наиболее частое использование SSH — это обеспечение безопасного терминального подключения к удаленному серверу. Базовый синтаксис прост, но есть важные параметры для повышения безопасности и удобства.

Базовый синтаксис подключения

Стандартная команда требует указания удаленного пользователя и адреса хоста (IP или доменное имя):

ssh [user]@[host]
# Пример:
ssh [email protected]

Указание нестандартного порта

По соображениям безопасности многие администраторы изменяют порт SSH по умолчанию (порт 22). Используйте флаг -p, чтобы указать другой номер порта:

ssh -p 2222 [email protected]

Выполнение одиночных удаленных команд

SSH не ограничивается открытием интерактивной оболочки. Вы можете выполнить одну команду на удаленном сервере и получить результат локально, что чрезвычайно полезно для написания скриптов и быстрых проверок.

# Выполнить 'ls -l' в каталоге /var/log на удаленном сервере
ssh user@host 'ls -l /var/log'

# Проверить время работы сервера
ssh user@host uptime

Управление аутентификацией с помощью ключей SSH

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

Генерация пар ключей

Если у вас еще нет пары ключей, вы можете сгенерировать ее с помощью ssh-keygen. Рекомендуется использовать надежную парольную фразу для защиты вашего закрытого ключа.

ssh-keygen -t ed25519 -C "[email protected]"

Ключи RSA все еще распространены, особенно на старых системах. Для нового ключа в современной настройке OpenSSH Ed25519 обычно является более простым выбором по умолчанию.

Копирование открытого ключа на сервер

Утилита ssh-copy-id — это самый простой способ установить ваш локальный открытый ключ в файл ~/.ssh/authorized_keys удаленного пользователя. Обычно вам нужно ввести пароль один раз, после чего будущие входы будут использовать ключ.

# Копирует ваш открытый ключ по умолчанию на сервер и устанавливает общие разрешения
ssh-copy-id user@host

Совет: Использование закрытого ключа Если ваш закрытый ключ находится не в стандартном расположении (~/.ssh/id_rsa), вы должны использовать флаг -i, чтобы указать его путь при подключении:

ssh -i ~/.ssh/my_custom_key user@host

Безопасная передача файлов

SSH предоставляет два основных инструмента для безопасной передачи файлов: scp (Secure Copy) и sftp (Secure File Transfer Protocol).

A. Использование Secure Copy (scp)

scp идеально подходит для простых, быстрых, одноразовых передач файлов, предлагая интерфейс командной строки, смоделированный по образцу стандартной команды Unix cp (копирование).

Передача файлов с локального на удаленный

# Синтаксис: scp [локальный_файл] [user]@[host]:/[удаленный_путь]
scp deployment.tar.gz user@webserver:/var/www/uploads/

Передача файлов с удаленного на локальный

# Синтаксис: scp [user]@[host]:/[удаленный_файл] [локальный_путь]
scp user@dbserver:/var/log/backup.sql .

Рекурсивное копирование каталогов

Используйте флаг -r для копирования целых структур каталогов.

scp -r ~/project_files/ user@buildserver:/home/user/builds/

B. Использование Secure File Transfer Protocol (sftp)

sftp устанавливает интерактивный сеанс, аналогичный традиционному FTP-клиенту, но защищенный через SSH. Он лучше подходит для навигации по удаленным каталогам, просмотра файлов и выполнения нескольких передач в рамках одного сеанса.

Запуск сеанса sftp

sftp user@host

Распространенные команды сеанса sftp

Команда Описание
ls Список удаленных файлов
lls Список локальных файлов
get filename Скачать файл с удаленного сервера
put filename Загрузить файл на удаленный сервер
cd /path/ Сменить удаленный каталог
lcd /path/ Сменить локальный каталог
quit Выйти из сеанса sftp

Туннелирование SSH с локальным перенаправлением портов

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

Локальное перенаправление портов (-L)

Локальное перенаправление направляет трафик с порта на вашей локальной машине на указанный порт на удаленном хосте через SSH-сервер. Это полезно для доступа к внутренним базам данных, веб-интерфейсам или проприетарным службам, которые не доступны напрямую из публичного интернета.

Сценарий: Вы хотите получить доступ к частному внутреннему веб-серверу (доступному только с jumpbox) на порту 80.

# Синтаксис: ssh -L [локальный_порт]:[целевой_хост]:[целевой_порт] [user]@[шлюз]
ssh -L 8080:internal-web.lan:80 user@jumpbox -N
  • -L 8080:internal-web.lan:80: Трафик, поступающий на вашу локальную машину на порту 8080, перенаправляется на internal-web.lan на порт 80 через jumpbox.
  • -N: Указывает SSH не выполнять удаленную команду; он просто устанавливает туннель.

После установки соединения вы можете получить доступ к внутреннему сайту, перейдя в локальном браузере по адресу http://localhost:8080.

Повышение эффективности с помощью файла конфигурации SSH

Ручной ввод сложных команд SSH, включая пользовательские порты, имена пользователей и пути к ключам, неэффективен. Файл конфигурации SSH (~/.ssh/config) позволяет определять псевдонимы и настройки для часто используемых серверов.

Пример конфигурации (~/.ssh/config)

Создайте или отредактируйте файл ~/.ssh/config со следующей структурой:

# Сервер 1: Стандартный ключ, нестандартный порт
Host dev-web
    HostName 10.0.0.50
    User deployment_user
    Port 2222
    IdentityFile ~/.ssh/id_rsa_dev

# Сервер 2: Доступ через шлюз с аутентификацией по ключу
Host production-db
    HostName 10.0.20.15
    User sysadmin
    IdentityFile ~/.ssh/prod_key
    LocalForward 54320 127.0.0.1:5432

Во втором примере команда ssh production-db открывает локальный порт на вашей рабочей станции. Затем вы можете направить PostgreSQL-клиент на localhost:54320, и SSH перенесет трафик на 127.0.0.1:5432, как видно с удаленного хоста.

Подключение с помощью псевдонимов

После настройки подключение становится значительно проще:

# Подключается к 10.0.0.50 на порту 2222 как deployment_user
ssh dev-web

# Подключается и автоматически настраивает перенаправление портов (если настроено)
ssh production-db

Ключевой вывод

Начните с ssh user@host, добавьте аутентификацию по ключам и перенесите повторяющиеся параметры в ~/.ssh/config. Как только эти основы будут освоены, локальное перенаправление с помощью ssh -L даст вам контролируемый способ доступа к частным службам, не подвергая их прямому воздействию сети.