LinuxRuLinux без лишней теории
Удалённый доступ

Как подключиться по SSH из Linux и Windows: от первого входа до туннелей

Редакция LinuxRu8 мин чтенияИнструкции

Чтобы подключиться по SSH, выполните ssh пользователь@адрес в терминале Linux или в PowerShell Windows 10 и 11, где клиент OpenSSH уже встроен. Для входа без пароля создайте ключ командой ssh-keygen -t ed25519, отправьте его на сервер через ssh-copy-id, а частые подключения сократите до ssh имя через файл ~/.ssh/config.

Как подключиться по SSH из Linux и Windows: от первого входа до туннелей
Фото: Hpott, CC BY-SA 4.0, Wikimedia Commons
Содержание
  1. Первое подключение
  2. SSH из Windows
  3. Ключи ssh-keygen
  4. ssh-agent
  5. Файл ssh config
  6. scp и rsync
  7. Проброс портов
  8. Ошибки подключения
  9. Частые вопросы

Как подключиться по SSH в первый раз

Для подключения нужны три вещи: адрес сервера, имя пользователя на нём и запущенный на сервере sshd. Клиент OpenSSH в большинстве дистрибутивов уже стоит, если нет, ставится пакетом openssh-client в Debian и Ubuntu, openssh-clients в Fedora и openssh в Arch.

ssh user@192.168.1.20
# сервер слушает нестандартный порт
ssh -p 2222 user@example.com
# выполнить одну команду и выйти
ssh user@192.168.1.20 'df -h'

При первом подключении клиент покажет отпечаток ключа сервера и спросит, доверять ли ему. Это защита от подмены: в идеале отпечаток нужно сверить с тем, что показывает сам сервер (ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub), или с данными в панели хостинга. После ответа yes ключ запишется в ~/.ssh/known_hosts, и в следующий раз вопроса не будет.

Выход из сессии - команда exit или Ctrl+D. Если соединение зависло и не реагирует, нажмите по очереди Enter, затем ~ и .: это управляющая последовательность клиента, которая принудительно рвёт подключение.

SSH-клиент в Windows 10 и 11 без лишних программ

PuTTY больше не обязателен: в Windows 10 (начиная с версии 1809) и Windows 11 есть встроенный клиент OpenSSH, и он работает в PowerShell, cmd и Windows Terminal теми же командами, что и в Linux. Проверить и при необходимости доставить его можно в PowerShell от имени администратора:

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Ключи и настройки в Windows лежат в C:\Users\имя\.ssh\, файл config называется так же и понимает тот же синтаксис. Всё, что написано ниже про ключи, config, scp и туннели, работает и в Windows. Исключение одно: утилиты ssh-copy-id в Windows нет, открытый ключ на сервер придётся отправить командой, показанной в следующем разделе.

Если вы работаете в WSL, внутри него свой отдельный клиент OpenSSH со своими ключами в домашнем каталоге Linux. Как организовать рабочую среду в WSL, мы разбирали в статье WSL2 в 2026 году.

Создаём SSH-ключи и отправляем их на сервер

Вход по ключу удобнее и безопаснее пароля. Пара состоит из закрытого ключа, который никогда не покидает ваш компьютер, и открытого, который кладётся на сервер в ~/.ssh/authorized_keys. В 2026 году стандартный выбор - Ed25519: ключ короткий, быстрый и поддерживается всеми актуальными серверами. RSA нужен только для очень старых систем, а DSA в OpenSSH 10 удалён полностью.

ssh-keygen -t ed25519 -C "laptop-2026"
# ключ для старого сервера, где нет Ed25519
ssh-keygen -t rsa -b 4096 -C "legacy"
# ключ на аппаратном токене FIDO2
ssh-keygen -t ed25519-sk

Программа предложит путь (по умолчанию ~/.ssh/id_ed25519) и парольную фразу. Ставьте её: если ноутбук украдут, без фразы ключ бесполезен. Чтобы не вводить фразу каждый раз, есть ssh-agent, о нём ниже. Комментарий после -C помогает потом понять, какой ключ с какого устройства.

Отправка ключа из Linux и macOS

ssh-copy-id user@192.168.1.20
# конкретный ключ и нестандартный порт
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@example.com

Отправка ключа из Windows

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@192.168.1.20 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Права здесь не формальность: если ~/.ssh или authorized_keys доступны на запись группе или всем, sshd молча проигнорирует ключ. Подробно о числовой записи прав в статье про chmod и chown. Когда вход по ключу заработал, на сервере можно отключить пароли, это часть настройки, описанной в материале про защиту SSH-сервера.

ssh-agent: парольная фраза один раз за сеанс

Агент держит расшифрованные ключи в памяти. В KDE Plasma и GNOME он обычно запускается вместе с сеансом, а в чистой консоли его поднимают вручную:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
# какие ключи сейчас загружены
ssh-add -l

В Windows агент работает как служба, но по умолчанию выключен. Включите его один раз в PowerShell от администратора, затем добавьте ключ уже от своего пользователя:

Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519

Удобная настройка для config: строка AddKeysToAgent yes сама добавит ключ в агент при первом использовании. А вот пробрасывать агент на сервер (ForwardAgent yes) стоит только на машины, которым вы полностью доверяете: root на том сервере сможет пользоваться вашими ключами, пока вы подключены. Для перехода через промежуточный сервер есть более безопасный ProxyJump.

Файл ~/.ssh/config: короткие имена вместо длинных команд

Когда серверов больше двух, набирать каждый раз порт, пользователя и путь к ключу надоедает. Файл ~/.ssh/config превращает это в короткие псевдонимы:

Host *
    AddKeysToAgent yes
    ServerAliveInterval 60

Host homepi
    HostName 192.168.1.20
    User user
    IdentityFile ~/.ssh/id_ed25519

Host vps
    HostName example.com
    Port 2222
    User admin
    IdentityFile ~/.ssh/id_vps
    IdentitiesOnly yes

# доступ к внутренней машине через vps
Host db
    HostName 10.0.0.5
    User admin
    ProxyJump vps

Теперь достаточно ssh homepi или ssh db, а псевдонимы подхватывают и scp, rsync, и Git. Клиент применяет первое найденное значение каждого параметра, поэтому общий блок Host * с умолчаниями надёжнее держать в конце файла или задавать в нём только то, что не переопределяется ниже. Права на файл должны быть 600.

ПараметрЧто делает
HostNameРеальный адрес или домен сервера
User, PortИмя пользователя и порт по умолчанию для этого хоста
IdentityFileКакой закрытый ключ предлагать
IdentitiesOnly yesПредлагать только указанный ключ, а не все из агента (спасает от ошибки Too many authentication failures)
ProxyJumpПодключаться через промежуточный хост
ServerAliveIntervalСлать пакет раз в N секунд, чтобы NAT не рвал простаивающую сессию
LocalForwardПостоянный проброс порта при каждом подключении
IncludeПодключить дополнительные файлы, например ~/.ssh/config.d/*

Полный список параметров есть в man ssh_config на сайте OpenBSD, где разрабатывается OpenSSH.

Копирование файлов: scp, sftp и rsync

Для разовой передачи файла хватает scp. С OpenSSH 9.0 он по умолчанию работает через протокол SFTP, а для совсем старых серверов есть флаг -O, возвращающий прежний протокол.

# файл на сервер
scp report.pdf homepi:/home/user/
# каталог с сервера к себе
scp -r vps:/var/www/site ./backup-site
# интерактивная сессия, похожая на FTP
sftp homepi

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

# -a сохраняет права и даты, -v подробный вывод, -P прогресс и докачка
rsync -avP ~/Photos/ homepi:/srv/data/photos/
# сначала посмотреть, что будет сделано
rsync -avP --dry-run --delete ~/Photos/ homepi:/srv/data/photos/
# порт и ключ без config
rsync -avP -e "ssh -p 2222 -i ~/.ssh/id_vps" ./site/ admin@example.com:/var/www/site/

Слеш в конце исходного пути у rsync меняет смысл: ~/Photos/ копирует содержимое каталога, а ~/Photos создаст на сервере вложенную папку Photos. С ключом --delete ошибка в одном символе может стереть данные на приёмнике, поэтому сначала всегда запускайте команду с --dry-run.

Проброс портов и SOCKS-прокси через SSH

SSH умеет пробрасывать TCP-порты, и это часто проще, чем настраивать VPN ради одной службы.

Локальный проброс (-L)

Открыть у себя порт, который ведёт на сервис, доступный только с сервера. Классический пример - база данных или веб-панель, слушающая только localhost:

# localhost:8080 у вас ведёт на 127.0.0.1:80 на сервере
ssh -L 8080:127.0.0.1:80 vps
# только туннель, без командной оболочки
ssh -N -L 5432:127.0.0.1:5432 vps

Обратный проброс (-R)

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

# порт 2222 на vps ведёт на ваш локальный sshd
ssh -N -R 2222:127.0.0.1:22 vps

Динамический проброс (-D)

Поднимает локальный SOCKS5-прокси, через который браузер ходит в сеть от имени сервера:

ssh -N -D 1080 vps
# в браузере укажите SOCKS5 127.0.0.1:1080

Для постоянного доступа ко всей домашней сети туннели по SSH неудобны, тут лучше WireGuard, смотрите статью WireGuard для доступа к домашней сети.

Частые ошибки SSH и что с ними делать

Первое правило диагностики - запустить клиент с подробным выводом: ssh -v user@host (или -vvv для максимума). В нём видно, какие ключи пробуются и на каком шаге всё ломается.

  • Connection refused. На сервере не запущен sshd или он слушает другой порт. Проверьте на сервере systemctl status ssh (в Fedora и Arch служба называется sshd).
  • Connection timed out. Пакеты не доходят: файрвол, неверный адрес, порт не проброшен на роутере.
  • Permission denied (publickey). Сервер не принял ключ. Проверьте права на ~/.ssh и authorized_keys, правильность пользователя и то, что клиент предлагает нужный ключ (видно в выводе -v).
  • Too many authentication failures. Агент предложил слишком много ключей подряд. Добавьте для этого хоста IdentitiesOnly yes и явный IdentityFile.
  • REMOTE HOST IDENTIFICATION HAS CHANGED. Ключ сервера изменился. После переустановки сервера это нормально, удалите старую запись командой ssh-keygen -R имя_или_адрес. Если сервер не переустанавливали, не подключайтесь и выясните причину.
  • Сессия рвётся при простое. Добавьте ServerAliveInterval 60 в config.

Если вы много работаете в терминале, сэкономить время помогут сочетания клавиш и история команд, о них статья горячие клавиши терминала.

Частые вопросы

Как создать SSH-ключ?

Выполните ssh-keygen -t ed25519 -C "комментарий" и задайте парольную фразу. Закрытый ключ появится в ~/.ssh/id_ed25519, открытый в ~/.ssh/id_ed25519.pub.

Как скопировать ключ на сервер из Windows?

В Windows нет ssh-copy-id. Отправьте содержимое файла .pub через ssh командой type с перенаправлением в ~/.ssh/authorized_keys на сервере, как показано в статье, и выставьте права 700 и 600.

Где лежит файл ssh config?

В Linux и macOS это ~/.ssh/config, в Windows C:\Users\имя\.ssh\config. Если файла нет, создайте его и выставьте права 600.

Чем scp отличается от rsync?

scp просто копирует файлы, rsync передаёт только изменения, умеет докачку и синхронизацию с удалением лишнего. Для больших каталогов и регулярных копий лучше rsync.

Что делать при ошибке Permission denied (publickey)?

Запустите ssh -v, проверьте, какой ключ предлагается, верен ли пользователь и что права на ~/.ssh и authorized_keys на сервере равны 700 и 600.

Нужен ли PuTTY в Windows?

Нет, в Windows 10 и 11 есть встроенный клиент OpenSSH. PuTTY остаётся вариантом для тех, кому нужен графический интерфейс и сохранённые сессии.

Документация и источники

Читайте также

Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.