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

> Как подключиться к GPU-серверу по SSH: создайте ключ ed25519 (macOS, Linux, Windows), подключитесь, добавьте коллег и отключите вход по паролю. Готовые команды.

Источник: https://fullgpu.com/ru/docs/ssh-access  
Обновлено: 2026-10-23  
Издатель: FullGPU (https://fullgpu.com/)

Чтобы подключиться по SSH к GPU-серверу FullGPU, нужна пара ключей: закрытый ключ остаётся на вашем компьютере, а открытый размещается на сервере. Мы устанавливаем открытый ключ, который вы отправляете вместе с заказом, поэтому первый вход выполняется без пароля. Если вместо этого вы выбрали пароль root, ключ можно [добавить после выдачи](https://fullgpu.com/ru/docs/ssh-access#password-login). На этой странице — настройка SSH-ключа в macOS, Linux и Windows, запись в файле конфигурации, доступ для коллег и базовое усиление защиты. Если сервер вам уже предоставлен, переходите к [быстрому старту](https://fullgpu.com/ru/docs/quickstart): он начинается сразу после первого входа.

## Создание ключа 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` — просто метка.

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

Когда будете [развёртывать сервер](https://fullgpu.com/ru/deploy), вставьте целиком строку из файла `.pub` в форму заказа или выберите ключ, сохранённый в личном кабинете. Если забыли это сделать, после предоставления сервера [создайте тикет в поддержку](https://fullgpu.com/ru/help/getting-support) через личный кабинет. Передавайте только файл, имя которого заканчивается на `.pub`: нам нужен лишь открытый ключ, а закрытый никогда не должен покидать ваш компьютер.

## Выбрали вход по паролю?

Если при заказе вы выбрали вход по паролю, подключитесь командой `ssh root@203.0.113.10` и введите пароль root, показанный в личном кабинете. Затем скопируйте открытый ключ на сервер, чтобы перейти на вход по ключу:

```
ssh-copy-id root@203.0.113.10
```

В Windows нет `ssh-copy-id`; в PowerShell выполните вместо этого:

```
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh root@203.0.113.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
```

Когда вход по ключу заработает, смените пароль командой `passwd`, а затем [отключите вход по паролю](https://fullgpu.com/ru/docs/ssh-access#disable-password-login).

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

```
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. Этот приём используется в руководстве по [удалённой разработке](https://fullgpu.com/ru/docs/remote-development) для JupyterLab, а для сервисов, которые должны быть доступны извне, есть [руководство по файрволу](https://fullgpu.com/ru/docs/networking-firewall).

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

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

## Связанные страницы

- [Быстрый старт с GPU-сервером](https://fullgpu.com/ru/docs/quickstart): Быстрый старт с новым GPU-сервером FullGPU: войдите по SSH, проверьте GPU, обновите Ubuntu и запустите первый контейнер на GPU — с проверкой на каждом шаге.
- [VS Code Remote SSH и Jupyter на GPU-сервере](https://fullgpu.com/ru/docs/remote-development): Работа на GPU-сервере через VS Code Remote SSH, Jupyter на удалённом GPU через SSH-туннель и перенос данных с rsync и scp. Безопасные настройки, шаг за шагом.
- [Настройка файрвола на GPU-сервере](https://fullgpu.com/ru/docs/networking-firewall): Настройка файрвола на GPU-сервере с ufw: сначала разрешите SSH, фильтруйте IPv6, обойдите ловушку с портами Docker и защитите эндпоинт vLLM с TLS и API-ключом.
- [Образы ОС для GPU-серверов с CUDA, ROCm и Docker](https://fullgpu.com/ru/products/os-images): Образы ОС для GPU-серверов: Ubuntu 22.04 и 24.04 с драйверами NVIDIA, CUDA, Docker и Container Toolkit, а также ROCm для AMD. Узнайте, что предустановлено.
