Начало работы

Подключение к GPU-серверу по SSH

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

На этой странице
  1. Создание ключа ed25519
  2. Отправка открытого ключа вместе с заказом
  3. Подключение к серверу
  4. Сохранение подключения в ~/.ssh/config
  5. Доступ для коллег
  6. Отключение входа по паролю
  7. Основы проброса портов
  8. Устранение неполадок

Чтобы подключиться по SSH к GPU-серверу FullGPU, нужна пара ключей: закрытый ключ остаётся на вашем компьютере, а открытый размещается на сервере. Мы устанавливаем открытый ключ, который вы отправляете вместе с заказом, поэтому первый вход выполняется без пароля. На этой странице — настройка SSH-ключа в macOS, Linux и Windows, запись в файле конфигурации, доступ для коллег и базовое усиление защиты. Если сервер вам уже предоставлен, переходите к быстрому старту: он начинается сразу после первого входа.

Создание ключа ed25519

Ключи ed25519 короткие, быстрые и поддерживаются всеми актуальными версиями OpenSSH. Одна и та же команда работает в macOS, Linux и в PowerShell на Windows 10 или 11, где клиент OpenSSH уже встроен:

ssh-keygen -t ed25519 -C "alice-laptop"
  1. Нажмите Enter, чтобы оставить расположение по умолчанию: ~/.ssh/id_ed25519 в macOS и Linux, C:\Users\you\.ssh\id_ed25519 в Windows.
  2. Задайте парольную фразу. Она защитит ключ, если вы потеряете ноутбук.
  3. Выведите открытый ключ:
    # macOS and Linux
    cat ~/.ssh/id_ed25519.pub
    # Windows PowerShell
    Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub
    Вы увидите одну строку, которая начинается с ssh-ed25519. Текст после -C — просто метка.

Отправка открытого ключа вместе с заказом

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

Подключение к серверу

ssh root@203.0.113.10

Используйте IP-адрес и имя пользователя, указанные в личном кабинете; в примерах на этом сайте — пользователь root и адрес 203.0.113.10, зарезервированный для документации. При первом подключении SSH покажет отпечаток ключа хоста сервера и попросит подтверждения. Введите yes, и ключ сохранится в ~/.ssh/known_hosts. Должно появиться приглашение командной строки, а whoami выведет имя вашего пользователя. Если ключ лежит не в стандартном месте, добавьте -i и путь к нему.

Сохранение подключения в ~/.ssh/config

Запись в файле конфигурации избавляет от лишнего набора, и её также используют scp, rsync и VS Code. Добавьте следующее в ~/.ssh/config на своём компьютере (C:\Users\you\.ssh\config в Windows):

Host gpu1
    HostName 203.0.113.10
    User root
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
    ServerAliveInterval 60

Теперь для подключения достаточно ssh gpu1. IdentitiesOnly yes заставляет SSH предлагать только этот ключ — так не возникнет ошибка «Too many authentication failures», если в SSH-агенте загружено несколько ключей. ServerAliveInterval не даёт разрывать простаивающие сессии.

Доступ для коллег

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

Добавление ключа в существующую учётную запись

nano ~/.ssh/authorized_keys    # paste the key on a new line and save
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Каждая строка authorized_keys — это один ключ. Чтобы отозвать доступ, удалите строку.

Создание отдельной учётной записи (рекомендуется)

sudo adduser --disabled-password bob
sudo mkdir -p /home/bob/.ssh
sudo nano /home/bob/.ssh/authorized_keys    # paste Bob's public key
sudo chown -R bob:bob /home/bob/.ssh
sudo chmod 700 /home/bob/.ssh
sudo chmod 600 /home/bob/.ssh/authorized_keys

adduser спросит полное имя и другие данные — нажимайте Enter, чтобы их пропустить. У учётной записи нет пароля, поэтому Боб может войти только по своему ключу: команда ssh bob@203.0.113.10 должна открыть ему командную оболочку. Если ему нужны права администратора, задайте пароль, который он будет вводить для sudo, командой sudo passwd bob, а затем выполните sudo usermod -aG sudo bob. Группа docker по сути равнозначна root-доступу, поэтому добавляйте в неё только тех, кому доверили бы sudo.

Отключение входа по паролю

Вход только по ключу исключает подбор паролей. Сначала проверьте действующие настройки:

sudo sshd -T | grep -Ei \
  '^(passwordauthentication|kbdinteractiveauthentication|permitrootlogin)'

Если для passwordauthentication выводится yes, добавьте отдельный файл настроек (drop-in). Для большинства параметров OpenSSH использует первое прочитанное значение, а файлы в /etc/ssh/sshd_config.d/ читаются в алфавитном порядке, поэтому префикс 00- гарантирует, что применятся именно эти строки:

sudo tee /etc/ssh/sshd_config.d/00-keys-only.conf >/dev/null <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
EOF
sudo sshd -t && sudo systemctl reload ssh

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

ssh gpu1 'echo key login works'
ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password gpu1

Вторая команда должна завершиться сообщением Permission denied (publickey).

Дополнительно: fail2ban

Когда вход по паролю отключён, сканеры не смогут попасть на сервер, но продолжат засорять логи. fail2ban блокирует адреса после серии неудачных попыток, а пакет в Ubuntu по умолчанию включает jail для sshd:

sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Вы увидите jail sshd и его счётчики. Если служба не запускается, посмотрите вывод sudo journalctl -u fail2ban; на минимальных образах без /var/log/auth.log добавьте backend = systemd в секцию [sshd] файла /etc/fail2ban/jail.local и перезапустите службу.

Основы проброса портов

SSH умеет передавать и другие соединения, поэтому к сервису, который слушает только loopback-интерфейс сервера, можно подключиться, не открывая порт:

# your localhost:8888 reaches 127.0.0.1:8888 on the server
ssh -N -L 8888:127.0.0.1:8888 gpu1
# several ports at once
ssh -N -L 8888:127.0.0.1:8888 -L 8000:127.0.0.1:8000 gpu1

-N открывает туннель без удалённой оболочки; остановить его можно сочетанием Ctrl+C. Этот приём используется в руководстве по удалённой разработке для JupyterLab, а для сервисов, которые должны быть доступны извне, есть руководство по файрволу.

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

  • Permission denied (publickey). Выполните ssh -v gpu1, чтобы увидеть, какие ключи предлагаются, и проверьте имя пользователя. На сервере у ~/.ssh должны быть права 700, а у authorized_keys — 600, и владельцем обоих должен быть этот пользователь.
  • REMOTE HOST IDENTIFICATION HAS CHANGED. После переустановки это ожидаемо: удалите старую запись командой ssh-keygen -R 203.0.113.10. Если сервер не переустанавливали, не подключайтесь и создайте тикет в личном кабинете.
  • Нет доступа после изменения настроек. Не пытайтесь подключиться снова и снова. Создайте тикет в поддержку через личный кабинет, указав IP-адрес сервера и что именно вы изменили.

Не получается?

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

Создать тикет

Вход в FullGPU

Управляйте GPU-серверами, балансом и счетами.

Впервые в FullGPU? Создать аккаунт