Коротко: SSH по умолчанию использует TCP-порт 22. SFTP и scp работают внутри SSH-соединения, поэтому тоже используют порт 22. Сервер можно настроить на любой другой порт; тогда подключайтесь командой ssh -p PORT user@host. Ниже: как узнать, какой порт сервер использует на самом деле, как проверить, что он доступен, и как передать другой порт в ssh, scp, rsync и конфиг SSH.
| Протокол | Порт по умолчанию | Транспорт | Примечание |
|---|---|---|---|
| SSH | 22 | TCP | Доступ к shell, туннели, проброс портов |
| SFTP / scp | 22 | TCP | Работают внутри SSH, отдельного порта нет |
| FTP | 21 (+ порты данных) | TCP | Без шифрования, если не используется FTPS |
| Telnet | 23 | TCP | Без шифрования, не выставляйте наружу |
| RDP | 3389 | TCP + UDP | Удалённый рабочий стол Windows |
| 2222 | — | TCP | Популярный альтернативный порт SSH, не стандарт |
Номера остальных служб сервера, от DNS и почты до баз данных, собраны в справочнике распространённых портов (англ.).
Что такое порт 22 и стоит ли держать его открытым?
Порт 22 — это TCP-порт, который IANA закрепила за SSH в 1995 году. Тату Юлёнен, автор первой версии SSH, попросил именно его, потому что номер был свободен и стоял между FTP на 21-м и Telnet на 23-м — открытыми текстовыми протоколами, которые SSH должен был заменить. На сервере на порту 22 почти всегда отвечает демон SSH: sshd из OpenSSH в Linux или компонент OpenSSH Server в Windows. SFTP-клиенты, scp, rsync и git по SSH заходят через тот же порт.
Порт 22 — это TCP-порт. В реестре IANA номер 22 записан и для UDP и SCTP, поэтому в некоторых таблицах портов встречается 22/udp, но OpenSSH там никогда не слушает. Правило файрвола для UDP 22 не открывает ничего, что нужно SSH.
- Держите его открытым, если управляете сервером по SSH, но только со входом по ключам (ssh-copy-id кладёт ваш ключ на сервер) и с выключенной аутентификацией по паролю. На любой публичный адрес с открытым 22-м круглосуточно идут автоматические попытки входа; против одних только ключей они ничего не дают.
- Ограничьте его своим адресом, если всегда подключаетесь с одного IP. Команды — в разделе о файрволе ниже.
- Держите его закрытым, если он не нужен, например на Windows-сервере, к которому вы подключаетесь только по удалённому рабочему столу.
Свежий OpenSSH и сам немного защищается: начиная с версии 9.8 sshd временно отклоняет соединения с адресов, с которых раз за разом не удаётся войти (PerSourcePenalties, включено по умолчанию). В Debian 13 поставляется OpenSSH 10.0, и там это есть; в Ubuntu 24.04 — версия 9.6, и там этого нет.
Чтобы узнать, доступен ли порт 22 из интернета, введите IP сервера в проверку открытых портов (англ.). Она подключается с нашего сервера в Амстердаме и отвечает Open, Closed или No answer — те же три исхода, что у проверки через nc ниже.
Как узнать, на каком порту слушает sshd
Файл конфигурации говорит, что должно происходить, а таблица сокетов — что происходит на самом деле. Начните с таблицы сокетов:
# На каких TCP-портах sshd слушает прямо сейчас?
sudo ss -tlnp | grep -E '"sshd"|"systemd",pid=1,'
# Пример вывода — порт 22 на всех адресах IPv4 и IPv6:
# LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3))
# LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=812,fd=4))
# Итоговая конфигурация после слияния всех подключаемых файлов:
sudo sshd -T | grep -iE '^(port|listenaddress)'sshd -T важен потому, что строка Port может стоять как в /etc/ssh/sshd_config, так и в любом файле в /etc/ssh/sshd_config.d/, а строки Port складываются: sshd слушает каждый порт, названный в любой из них. Если искать только в основном файле, второй порт легко пропустить.
Доступа нет и выполнить ничего не получается? Откройте браузерную консоль провайдера (в VMHeaven — VNC-консоль в личном кабинете), войдите там и выполните те же две команды.
Как проверить, открыт ли порт SSH
Проверяйте со своего компьютера, а не с сервера: вопрос в том, доступен ли порт снаружи.
# Linux, macOS
nc -zv -w 5 203.0.113.10 22
# Windows PowerShell
Test-NetConnection 203.0.113.10 -Port 22
# Баннер SSH доказывает, что отвечает именно sshd
# (строка, начинающаяся с SSH-2.0-OpenSSH):
nc -w 3 203.0.113.10 22 </dev/null- Succeeded / TcpTestSucceeded: True — порт открыт. Если при этом не удаётся войти, проблема уже в самом SSH, например Permission denied (publickey).
- Connection refused — сервер ответил, но на этом порту никто не слушает или файрвол отклоняет соединение. Разбор в статье SSH: Connection refused (англ.).
- Timed out — не ответил вообще никто: неверный IP, сервер выключен или файрвол отбрасывает пакеты. Разбор в статье SSH: Connection timed out (англ.).
Как подключиться, если SSH работает на другом порту
Каждая утилита обозначает порт своим ключом, и это самый частый источник путаницы:
ssh -p 2222 root@203.0.113.10
scp -P 2222 backup.tar.gz root@203.0.113.10:/root/ # заглавная P
sftp -P 2222 root@203.0.113.10 # заглавная P
rsync -av -e "ssh -p 2222" ./site/ root@203.0.113.10:/var/www/site/scp (англ.) и sftp принимают заглавную -P, потому что строчная -p у них уже занята: она сохраняет время изменения и права файлов.
Если подключаетесь часто, один раз пропишите порт в конфиге SSH (англ.), ~/.ssh/config. Все утилиты на базе OpenSSH — ssh, scp, sftp, rsync, git — подхватят его автоматически:
Host myvps
HostName 203.0.113.10
User root
Port 2222
IdentityFile ~/.ssh/id_ed25519
# Теперь достаточно:
# ssh myvps
# scp file.txt myvps:/root/Чтобы, не подключаясь, увидеть, к какому хосту и порту и под каким пользователем ssh на самом деле подключится по псевдониму, попросите его вывести итоговую конфигурацию. В PowerShell замените grep -E на Select-String:
ssh -G myvps | grep -E '^(hostname|port|user) 'user root
hostname 203.0.113.10
port 2222В PuTTY порт вводится в поле Port рядом с именем хоста на странице Session. В WinSCP и FileZilla есть такое же поле; в FileZilla выберите протокол sftp://, чтобы клиент работал по SSH, а не по FTP. Что нужно обычному FTP и FTPS, описано в статье о портах FTP (англ.).
Стоит ли менять порт SSH?
Перенос SSH с порта 22 сокращает число автоматических попыток входа в ваших логах. Заметно безопаснее сервер от этого не становится: сканер портов быстро найдёт новый порт. SSH защищают вход только по ключам, отключённый вход по паролю и файрвол — пошагово это разобрано в статье Как защитить доступ по SSH (англ.).
Если порт всё же хотите сменить, действуйте в таком порядке, при котором невозможно потерять доступ: сначала откройте новый порт в файрволе, добавьте новую строку Port, оставив 22, примените настройку, проверьте вход по новому порту во второй сессии и только потом уберите 22. Полная инструкция, включая SELinux в Rocky и сокет-юнит в Ubuntu, — в статье Как безопасно сменить порт SSH (англ.).
Как разрешить порт SSH в файрволе
sudo ufw allow 22/tcp # или: sudo ufw allow OpenSSH
sudo ufw limit 22/tcp # по желанию: ограничить частоту повторных подключений
sudo ufw status verbosesudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reloadВсегда разрешайте SSH до того, как включаете файрвол на сервере, к которому подключены по SSH. О правилах и политиках по умолчанию — в статье Настройка файрвола UFW (англ.).
Чтобы принимать SSH только со своего адреса, сначала добавьте правило для него. Замените YOUR_IP на публичный IP компьютера, с которого подключаетесь, — его покажет What is my IP (англ.). Если вы заходите на сервер по IPv6, добавьте такое же правило для своего IPv6-адреса:
sudo ufw allow proto tcp from YOUR_IP to any port 22Откройте вторую SSH-сессию и убедитесь, что вход работает. Только после этого удалите правило, которое пускает всех:
sudo ufw delete allow OpenSSH # или: delete allow 22/tcp, или delete limit 22/tcp
sudo ufw status verbose # порт 22 должен упоминаться только в правиле с YOUR_IPПорт SSH в Windows Server
В Windows Server 2019 и 2022 OpenSSH Server ставится как дополнительный компонент (optional feature). В Windows Server 2025 он уже установлен, и его нужно только включить: в «Диспетчере серверов» на странице «Локальный сервер» включите удалённый SSH-доступ (свойство Remote SSH Access) или выполните Start-Service sshd. Он тоже слушает TCP 22, конфигурация лежит в C:\ProgramData\ssh\sshd_config, а установка создаёт входящее правило брандмауэра OpenSSH-Server-In-TCP:
Get-Service sshd
Get-NetTCPConnection -LocalPort 22 -State Listen
Get-NetFirewallRule -Name OpenSSH-Server-In-TCP | Select-Object Name, EnabledУдалённый рабочий стол — другой протокол на другом порту, TCP и UDP 3389, а смена порта RDP (англ.) идёт в том же порядке, что и у SSH: сначала открыть новый порт. Если вам нужен сервер, где вы управляете и тем и другим, KVM VPS даёт полный root-доступ и SSH на порту 22 с первой загрузки, а в тарифах Windows RDP удалённый рабочий стол готов к работе сразу.
Частые вопросы
Какой порт у SSH по умолчанию — TCP или UDP?
TCP 22. SFTP и scp работают внутри SSH и используют тот же порт. OpenSSH слушает только TCP, поэтому правило файрвола для UDP 22 ничего не открывает. Если сервер настроен на другой порт, передайте его клиенту: ssh -p ПОРТ, а у scp и sftp — заглавной -P.
Стоит ли менять порт SSH и как сделать это без потери доступа?
Смена порта лишь сокращает число автоматических попыток входа в логах; защищают SSH вход только по ключам, отключённый вход по паролю и файрвол. Если всё же меняете порт, сначала откройте новый порт в файрволе, добавьте строку Port с новым номером, оставив 22, примените настройку и проверьте вход по новому порту во второй сессии — только потом уберите 22. В Ubuntu 24.04 настройка вступает в силу после sudo systemctl daemon-reload и sudo systemctl restart ssh.socket.
Как узнать, на каком порту работает SSH на сервере?
На сервере выполните sudo ss -tlnp | grep -E '"sshd"|"systemd",pid=1,' — команда покажет порт, который реально слушает sshd (в Ubuntu 22.10 и новее сокет за него может держать systemd). Итоговую конфигурацию со всеми подключёнными файлами покажет sudo sshd -T | grep -i ^port. Если войти не получается, выполните те же команды в браузерной консоли провайдера.