Начало работы
Подключение к GPU-серверу по SSH
Создайте ключ, отправьте нам его открытую часть вместе с заказом, затем подключитесь, откройте доступ команде и усильте защиту SSH.
На этой странице
Создание ключа ed25519
Ключи ed25519 короткие, быстрые и поддерживаются всеми актуальными версиями OpenSSH. Одна и та же команда работает в macOS, Linux и в PowerShell на Windows 10 или 11, где клиент OpenSSH уже встроен:
ssh-keygen -t ed25519 -C "alice-laptop"
- Нажмите Enter, чтобы оставить расположение по умолчанию:
~/.ssh/id_ed25519в macOS и Linux,C:\Users\you\.ssh\id_ed25519в Windows. - Задайте парольную фразу. Она защитит ключ, если вы потеряете ноутбук.
- Выведите открытый ключ:
Вы увидите одну строку, которая начинается с# 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
root и адрес 203.0.113.10, зарезервированный для документации. При первом подключении SSH покажет отпечаток ключа хоста сервера и попросит подтверждения. Введите yes, и ключ сохранится в ~/.ssh/known_hosts. Должно появиться приглашение командной строки, а whoami выведет имя вашего пользователя. Если ключ лежит не в стандартном месте, добавьте и путь к нему.
Сохранение подключения в ~/.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 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 . Группа docker
Отключение входа по паролю
Вход только по ключу исключает подбор паролей. Сначала проверьте действующие настройки:
sudo sshd -T | grep -Ei \
'^(passwordauthentication|kbdinteractiveauthentication|permitrootlogin)'
Если для passwordauthentication выводится yes/etc/ssh/sshd_config.d/ читаются в алфавитном порядке, поэтому префикс гарантирует, что применятся именно эти строки:
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 ; на минимальных образах без /var/log/auth.log добавьте backend = systemd в секцию [sshd] файла /etc/fail2ban/jail.local и перезапустите службу.
Основы проброса портов
# 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
открывает туннель без удалённой оболочки; остановить его можно сочетанием 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-адрес сервера и что именно вы изменили.
Не получается?
Создайте тикет в личном кабинете: укажите сервер, что вы запускали, и приложите вывод ошибок, если он есть. Инженеры отвечают круглосуточно.