Руководства

Порт SSH 22: порт по умолчанию, как узнать, какой слушает сервер, и подключиться к другому

SSH по умолчанию слушает TCP-порт 22. Как узнать, какой порт использует сервер, проверить, открыт ли он, и подключиться к другому порту через ssh, scp и rsync.

Опубликовано ~8 мин чтения

Коротко: SSH по умолчанию использует TCP-порт 22. SFTP и scp работают внутри SSH-соединения, поэтому тоже используют порт 22. Сервер можно настроить на любой другой порт; тогда подключайтесь командой ssh -p PORT user@host. Ниже: как узнать, какой порт сервер использует на самом деле, как проверить, что он доступен, и как передать другой порт в ssh, scp, rsync и конфиг SSH.

ПротоколПорт по умолчаниюТранспортПримечание
SSH22TCPДоступ к shell, туннели, проброс портов
SFTP / scp22TCPРаботают внутри SSH, отдельного порта нет
FTP21 (+ порты данных)TCPБез шифрования, если не используется FTPS
Telnet23TCPБез шифрования, не выставляйте наружу
RDP3389TCP + 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

Файл конфигурации говорит, что должно происходить, а таблица сокетов — что происходит на самом деле. Начните с таблицы сокетов:

Debian · Ubuntu · Rocky
# На каких 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, scp, sftp, rsync
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 — подхватят его автоматически:

~/.ssh/config
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:

Linux · macOS
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 в файрволе

UFW (Debian · Ubuntu)
sudo ufw allow 22/tcp          # или: sudo ufw allow OpenSSH
sudo ufw limit 22/tcp          # по желанию: ограничить частоту повторных подключений
sudo ufw status verbose
firewalld (Rocky · Alma)
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

Всегда разрешайте SSH до того, как включаете файрвол на сервере, к которому подключены по SSH. О правилах и политиках по умолчанию — в статье Настройка файрвола UFW (англ.).

Чтобы принимать SSH только со своего адреса, сначала добавьте правило для него. Замените YOUR_IP на публичный IP компьютера, с которого подключаетесь, — его покажет What is my IP (англ.). Если вы заходите на сервер по IPv6, добавьте такое же правило для своего IPv6-адреса:

UFW (Debian · Ubuntu)
sudo ufw allow proto tcp from YOUR_IP to any port 22

Откройте вторую SSH-сессию и убедитесь, что вход работает. Только после этого удалите правило, которое пускает всех:

UFW (Debian · Ubuntu)
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:

PowerShell (от имени администратора)
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. Если войти не получается, выполните те же команды в браузерной консоли провайдера.

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

Все статьи раздела