Баннер мобильный (3) Пройти тест

Что такое SSH и как он работает: функционал, установка, полезные аргументы

Как ML-специалисту безопасно подключиться к удаленному серверу

Разбор

25 июня 2025

Поделиться

Скопировано
Что такое SSH и как он работает: функционал, установка, полезные аргументы

Содержание

    Вы написали свою первую нейросеть. Она отлично работает на вашем ноутбуке на маленьком наборе данных, но как только вы загружаете полный датасет… обучение занимает неделю. Решение — использовать мощный сервер в облаке или в университете. Но как к нему подключиться и управлять им, сидя за своим ноутбуком? Ответ — SSH.

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

    Что такое SSH

    Простыми словами, SSH (Secure Shell, или «Безопасная оболочка») — это как секретный, зашифрованный туннель между вашим компьютером и другим компьютером где-то в интернете (например, мощным сервером с GPU). Все, что вы отправляете по этому туннелю — команды, пароли, код, — надежно шифруется. Никто со стороны не сможет подсмотреть, что вы делаете.

    Представьте, что вы хотите передать секретное сообщение другу через комнату, полную людей. Вы можете просто крикнуть его (это как старый и небезопасный протокол Telnet), и все его услышат. А можете договориться с другом об особом шифре, который знаете только вы вдвоем. Вы пишете записку, шифруете ее, передаете, и только ваш друг, зная ключ, сможет ее прочитать. SSH — это и есть продвинутый и надежный способ «шифрования записок».

    Зачем SSH нужен ML-специалисту

    В нашей сфере SSH — это рабочий инструмент на каждый день. Вот основные сценарии:

    • Обучение моделей на удаленных серверах. Ваш ноутбук не справится с обучением какой-нибудь GPT или Stable Diffusion. Вы арендуете сервер на AWS, Google Cloud или другом сервисе, подключаетесь к нему по SSH и запускаете обучение там.
    • Управление данными. Нужно загрузить на сервер датасет размером 100 ГБ или скачать с него обученную модель? SSH (и его компаньон SCP, о котором ниже) — ваш выбор.
    • Работа в команде. Часто несколько человек работают на одном мощном сервере. SSH позволяет каждому иметь свой безопасный доступ и работать, не мешая друг другу.
    • Доступ к вычислительным кластерам. В университетах и крупных компаниях есть целые кластеры машин. Доступ к ним почти всегда осуществляется через SSH.

    Без SSH мы были бы привязаны к мощностям своего личного компьютера, что в мире современного ML практически невозможно.

    Как работает алгоритм шифрования SSH

    В процессе подключения по SSH (его называют «рукопожатием» или handshake) участвуют три типа шифрования: симметричное, асимметричное и хеширование.

    1. Асимметричное шифрование (с парой «публичный-приватный ключ»). Используют в самом начале, чтобы клиент (ваш ПК) и сервер могли безопасно договориться об общем секрете, не передавая его в открытом виде.
    2. Симметричное шифрование (с одним ключом). Когда создали общий секретный ключ, он шифрует всю дальнейшую переписку (ваши команды, ответы сервера). Это намного быстрее, чем асимметричное шифрование.
    3. Хеширование. Используют для проверки целостности сообщений, чтобы убедиться, что их никто не изменил по пути.

    Давайте представим этот процесс в виде диалога между вашим компьютером и удаленным сервером.

    SSH как работает

    Что мы видим на этой схеме:

    • Начало (шаги 1–2): клиент и сервер «знакомятся» и договариваются о правилах игры (какой алгоритм использовать). Сервер предъявляет свой «паспорт» — публичный ключ хоста.
    • Создание секрета (шаги 3–4). Используя асимметричную криптографию, обе стороны генерируют общий секретный ключ для этой сессии. Ключ существует только на время подключения и никогда не передается по сети в открытом виде.
    • Аутентификация (шаги 5–8). Когда канал связи безопасен, вам нужно доказать, что у вас есть право на доступ, то есть приватный ключ. Сервер проверяет это с помощью вашего публичного ключа, который вы заранее на него добавили.
    • Безопасная работа. После аутентификации все, что вы печатаете, и все, что сервер вам отвечает, надежно шифрует быстрый симметричный алгоритм с использованием сеансового ключа.

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

    Как создать ключи шифрования в SSH

    Чтобы не вводить пароль каждый раз (это менее безопасно), мы используем аутентификацию по ключам. Давайте создадим свою пару «публичный-приватный».

    Откройте терминал (на Linux или macOS, или Git Bash/WSL на Windows) и введите команду:

    ssh-keygen -t rsa -b 4096 -C «your_email@example.com»

    • ssh-keygen: команда для генерации ключей.
    • -t rsa: тип алгоритма. RSA — самый распространенный и надежный.
    • -b 4096: длина ключа в битах. 4096 — это очень надежно.
    • -C «…»: комментарий, обычно сюда пишут почту или имя компьютера, чтобы не запутаться в ключах.

    Программа спросит, куда сохранить ключи (просто нажмите Enter, чтобы использовать путь по умолчанию), и попросит ввести пароль для ключа (passphrase). Это дополнительный уровень защиты: даже если кто-то украдет ваш приватный ключ, без этого пароля он бесполезен.

    В итоге у вас в папке ~/.ssh/ появятся два файла: 

    • id_rsa — ваш приватный ключ. НИКОГДА И НИКОМУ ЕГО НЕ ПОКАЗЫВАЙТЕ! 
    • id_rsa.pub — ваш публичный ключ. Его содержимое нужно скопировать на сервер, к которому вы хотите подключаться.

    Обычно это делается командой ssh-copy-id user@server_ip или вручную, добавляя содержимое id_rsa.pub в файл ~/.ssh/authorized_keys на сервере.

    Полезные аргументы SSH-команды

    Просто ssh user@host — это только начало. Вот несколько полезных флагов:

    • -p <порт>: подключиться к нестандартному порту. По умолчанию SSH использует порт 22, но из соображений безопасности его часто меняют. ssh user@host -p 2222
    • -L <локальный_порт>:localhost:<удаленный_порт>: проброс портов (port forwarding). Это киллер-фича для нас! Представьте, вы запустили на удаленном сервере Jupyter Notebook на порту 8888. Как открыть его в браузере на своем ноутбуке? Очень просто!
    • ssh -L 8080:localhost:8888 user@server_ip. Эта команда говорит: «Все, что придет на порт 8080 моего локального компьютера, безопасно перенаправь на порт 8888 удаленного сервера». После этого вы просто открываете в своем браузере http://localhost:8080 и видите свой Jupyter, как будто он запущен локально! То же самое работает для TensorBoard и любых других веб-интерфейсов.

    Использование SSH-конфиг-файла для удобного подключения

    Надоело каждый раз писать ssh -p 2222 -L 8080:localhost:8888 ml_user@123.45.67.89? Создайте конфигурационный файл!

    В папке ~/.ssh/ создайте файл с именем config (без расширения) и напишите в нем что-то вроде:

    Host my-gpu-server
        HostName 123.45.67.89
        User ml_user
        Port 2222
        IdentityFile ~/.ssh/id_rsa
        LocalForward 8080 localhost:8888

    Теперь для подключения к этому серверу со всеми настройками и пробросом портов достаточно ввести в терминале короткую команду:

    ssh my-gpu-server

    Удобно, чисто и профессионально!

    Практические примеры использования SSH

    1. Простое подключение: ssh my-gpu-server (используя конфиг)
    2. Быстрое выполнение одной команды без входа на сервер: хотите быстро проверить, какие GPU свободны? ssh my-gpu-server «nvidia-smi» Команда выполнится на сервере, а результат вы увидите в своем локальном терминале.
    3. Запуск долгого процесса обучения: подключитесь к серверу, запустите менеджер сессий (screen или tmux), а в нем уже запускайте ваш скрипт обучения (python train.py). После этого можно спокойно отключаться от сервера — процесс продолжит работать.

    Бонус: как использовать SCP для передачи файлов и папок

    SSH — это туннель, но как по нему «возить грузы»? Для этого есть SCP (Secure Copy Protocol). Он использует SSH для безопасного копирования файлов.

    Синтаксис простой: scp <откуда> <куда>

    • Загрузить файл с локальной машины на сервер: scp my_script.py my-gpu-server:/home/ml_user/scripts/ (здесь my-gpu-server — это имя хоста из вашего конфига)
    • Скачать файл с сервера на локальную машину: scp my-gpu-server:/home/ml_user/models/best_model.pth . (точка в конце означает «в текущую локальную папку»)
    • Чтобы скопировать целую папку, добавьте флаг -r (рекурсивно): scp -r ./my_project my-gpu-server:/home/ml_user/

    Коротко об SSH

    SSH — это не просто «черное окошко терминала». Это фундаментальный инструмент, который:

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

    Освоение SSH — это один из первых шагов от простого написания кода на ноутбуке к серьезной работе над ML-проектами. Теперь вперед — подключайтесь к серверам и обучайте великие модели! 

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии