ы написали свою первую нейросеть. Она отлично работает на вашем ноутбуке на маленьком наборе данных, но как только вы загружаете полный датасет… обучение занимает неделю. Решение — использовать мощный сервер в облаке или в университете. Но как к нему подключиться и управлять им, сидя за своим ноутбуком? Ответ — SSH.
SSH — один из самых важных инструментов в арсенале любого специалиста, работающего с данными. Как человек, который провел бесчисленные часы, подключаясь к удаленным серверам для обучения моделей, могу сказать: без SSH никуда.
Что такое SSH
Простыми словами, SSH (Secure Shell, или «Безопасная оболочка») — это как секретный, зашифрованный туннель между вашим компьютером и другим компьютером где-то в интернете (например, мощным сервером с GPU). Все, что вы отправляете по этому туннелю — команды, пароли, код, — надежно шифруется. Никто со стороны не сможет подсмотреть, что вы делаете.
Зачем SSH нужен ML-специалисту
В нашей сфере SSH — это рабочий инструмент на каждый день. Вот основные сценарии:
-
Обучение моделей на удаленных серверах. Ваш ноутбук не справится с обучением какой-нибудь GPT или Stable Diffusion. Вы арендуете сервер на AWS, Google Cloud или другом сервисе, подключаетесь к нему по SSH и запускаете обучение там.
-
Управление данными. Нужно загрузить на сервер датасет размером 100 ГБ или скачать с него обученную модель? SSH (и его компаньон SCP, о котором ниже) — ваш выбор.
-
Работа в команде. Часто несколько человек работают на одном мощном сервере. SSH позволяет каждому иметь свой безопасный доступ и работать, не мешая друг другу.
-
Доступ к вычислительным кластерам. В университетах и крупных компаниях есть целые кластеры машин. Доступ к ним почти всегда осуществляется через SSH.
Без SSH мы были бы привязаны к мощностям своего личного компьютера, что в мире современного ML практически невозможно.
Как работает алгоритм шифрования SSH
В процессе подключения по SSH (его называют «рукопожатием» или handshake) участвуют три типа шифрования: симметричное, асимметричное и хеширование.
-
Асимметричное шифрование (с парой «публичный-приватный ключ»). Используют в самом начале, чтобы клиент (ваш ПК) и сервер могли безопасно договориться об общем секрете, не передавая его в открытом виде.
-
Симметричное шифрование (с одним ключом). Когда создали общий секретный ключ, он шифрует всю дальнейшую переписку (ваши команды, ответы сервера). Это намного быстрее, чем асимметричное шифрование.
-
Хеширование. Используют для проверки целостности сообщений, чтобы убедиться, что их никто не изменил по пути.
Давайте представим этот процесс в виде диалога между вашим компьютером и удаленным сервером.

Что мы видим на этой схеме:
-
Начало (шаги 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
-
Простое подключение: ssh my-gpu-server (используя конфиг)
-
Быстрое выполнение одной команды без входа на сервер: хотите быстро проверить, какие GPU свободны? ssh my-gpu-server «nvidia-smi» Команда выполнится на сервере, а результат вы увидите в своем локальном терминале.
-
Запуск долгого процесса обучения: подключитесь к серверу, запустите менеджер сессий (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 — это один из первых шагов от простого написания кода на ноутбуке к серьезной работе над ML-проектами. Теперь вперед — подключайтесь к серверам и обучайте великие модели!
Обучиться работе с моделями машинного обучения: от базовой математики до написания собственного алгоритма — можно на совместной магистратуре Skillfactory и МИФИ «Прикладной анализ данных и машинное обучение».
Автор: skillfactory_school


