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

Содержание
Как подключиться по 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 остаётся вариантом для тех, кому нужен графический интерфейс и сохранённые сессии.
Документация и источники
- ssh_config(5), OpenBSD / OpenSSH, 2026
- OpenSSH Release Notes, OpenSSH, 2026
- Get started with OpenSSH for Windows, Microsoft, 2026
Читайте также
Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.