I’m working on aws cloud image which requires an ssh connection to connect. But my service provider has blocked the port 22 so I can’t connect to cloud image. So how can I change Ssh configuration to change the port number from 22 to something other?
asked Nov 12, 2019 at 12:41
1
Nowadays, you can change the SSH port on Windows 10 easily (as mentioned by others).
All you need is in this Microsoft documentation page.
Brief look at:
- Install SSH server;
- Change port in config file
%programdata%sshsshd_config
(for Windows):
- Add new firewall
rule with PowerShell running following command as Administrator:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2204
where2204
your port; - Restart your ‘SSH server’ windows service;
- (optional) Delete firewall rule for default
22
port.
answered Oct 26, 2020 at 17:47
hotenovhotenov
1911 silver badge4 bronze badges
If you are trying to change the SSH port in a Windows 10/Server 2016/2019 ,you can change the port in the below file
%programdata%sshsshd_config
Locate the line that starts with Port
and edit it there.
answered Apr 9, 2020 at 1:54
You say Windows 10 but of course Windows doesn’t natively use ssh. Though you can install bash or some other shell via the Linux Subsystem for Windows. This, I trust, is what you mean. Here are some basic instructions for changing the file containing the port information:
https://www.cyberciti.biz/faq/howto-change-ssh-port-on-linux-or-unix-server/
1: find / -name "sshd_config" 2>/dev/null
2: sudo nano /path/to/file ## probably /etc/ssh/sshd_config
3: ## locate Port 22 (removing any leading #)
4: ctrl-o # save the file
5: ctrl-x # exit nano
Once you have changed it you simply add the port designation to your ssh command when attempting to connect.
ssh username@host:port
(You may need to make firewall changes if there is one in between. It depends on the specifics of your arrangement.)
answered Nov 12, 2019 at 12:51
6
SSH — сетевой протокол прикладного уровня. Он позволяет безопасно передавать сетевые пакеты. Его используют для удаленного подключения к операционной системе, передачи файлов (как копирование обычных файлов, так и потоковая передача данных, например, с веб-камеры), подключения к базам данных, удаленного запуска команд и т.д.
Данный протокол шифрует все данные, включая пароли, поэтому он считается безопасным. Однако для того, чтобы злоумышленники не получили доступ к учётным данным пользователя, у которого есть доступ по SSH, рекомендуется обезопасить свой сервер.
По умолчанию SSH слушает порт 22. В целях безопасности рекомендуется сменить порт SSH на нестандартный. Это значительно усложнит жизнь ботам, которые постоянно сканируют серверы и открытые порты и пытаются подобрать логин и пароль для доступа к серверу по SSH по стандартному порту.
Помимо смены порта можно настроить блокировку количества попыток подключений к серверу (например, с помощью утилиты fail2ban), отключить подключение по SSH пользователя root, отказаться от простых и угадываемых логинов (таких как admin, ivanov, zabbix и пр.), настроить запрет подключения по паролю и включить подключение только по ключу (требуется предварительная настройка и проверка, иначе можно потерять доступ к серверу по SSH).
Как правило для подключения по SSH в терминале Linux используется следующая команда:
# ssh username@ip_address
Если изменить порт, то при подключении к серверу по SSH нужно явно указывать порт (возьмем для примера порт 2233):
# ssh -p 2233 username@ip_address
Для подключения с ОС Windows обычно используют специальные программы, например, PuTTy или MobaXterm. В них всегда можно явно указать порт подключения по SSH.
- Изменение порта SSH
- 1. Конфигурационный файл
- 2. Перезапуск SSH
- 3. Проверка
Изменение порта SSH
Конфигурационный файл
Обязательно проверьте, что порт, на который мы хотим заменить стандартный порт SSH, не занят другими службами. Это можно сделать с помощью утилиты netstat. Для этого потребуется установить пакет net-tools.
Debian/Ubuntu
# apt install net-tools # netstat -tulpan | grep 22
CentOS/AlmaLinux
# yum install net-tools # netstat -anp | grep 22
Вывод будет примерно таким:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 132394/sshd: /: tcp6 0 0 :::22 :::* LISTEN 132394/sshd:
Видим, что порт 22 занят. Проверим 2233:
#netstat -tulpan | grep 2233 для Ubuntu/Debian
или
# netstat -anp | grep 2233 для CentOS/AlmaLinux
Вывод пуст, можно занимать.
Меняем порт в конфигурационном файле SSH сервера, воспользоваться можно любым текстовым редактором:
# vim /etc/ssh/sshd_config
или
# nano /etc/ssh/sshd_config
Ищем строку:
Port 22
Если строка начинается с символа #, его нужно удалить, и вместо 22 порта написать любой другой, например, 2233. Сохраняем изменения.
Перезапуск SSH
Если вы допустили какую-либо ошибку в конфигурационном файле, то можете потерять связь с сервером. Будьте осторожны. Для начала лучше потренироваться на тестовом сервере. В идеале у вас должен быть альтернативный доступ к серверу, например по VNC.
Debian/Ubuntu
# systemctl restart ssh
CentOS/AlmaLinux
# systemctl restart sshd
Так как текущая сессия SSH ещё активна, можно открыть новое окно и проверить, что подключение по новому порту работает:
# ssh username@ip_address -p2233
Если подключение удалось, то настройки верные. В противном случае что-то не так, и можно проверить конфигурацию в уже открытом подключении.
Проверка
Debian/Ubuntu
# netstat -tulpan | grep ssh
CentOS/AlmaLinux
# netstat -anp | grep ssh
Если все нормально, увидим похожий результат:
tcp 0 0 *:2233 *:* LISTEN 3849/sshd tcp6 0 0 [::]:2233 [::]:* LISTEN 3849/sshd
или
root sshd 813 3 tcp6 *:2233 *:* root sshd 813 4 tcp4 *:2233 *:*
Готово. Мы сменили стандартный порт SSH на нестандартный, таким образом усилив безопасность своего сервера
Этот материал был полезен?
I’m working on aws cloud image which requires an ssh connection to connect. But my service provider has blocked the port 22 so I can’t connect to cloud image. So how can I change Ssh configuration to change the port number from 22 to something other?
asked Nov 12, 2019 at 12:41
1
Nowadays, you can change the SSH port on Windows 10 easily (as mentioned by others).
All you need is in this Microsoft documentation page.
Brief look at:
- Install SSH server;
- Change port in config file
%programdata%sshsshd_config
(for Windows):
- Add new firewall
rule with PowerShell running following command as Administrator:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2204
where2204
your port; - Restart your ‘SSH server’ windows service;
- (optional) Delete firewall rule for default
22
port.
answered Oct 26, 2020 at 17:47
hotenovhotenov
1911 silver badge4 bronze badges
If you are trying to change the SSH port in a Windows 10/Server 2016/2019 ,you can change the port in the below file
%programdata%sshsshd_config
Locate the line that starts with Port
and edit it there.
answered Apr 9, 2020 at 1:54
You say Windows 10 but of course Windows doesn’t natively use ssh. Though you can install bash or some other shell via the Linux Subsystem for Windows. This, I trust, is what you mean. Here are some basic instructions for changing the file containing the port information:
https://www.cyberciti.biz/faq/howto-change-ssh-port-on-linux-or-unix-server/
1: find / -name "sshd_config" 2>/dev/null
2: sudo nano /path/to/file ## probably /etc/ssh/sshd_config
3: ## locate Port 22 (removing any leading #)
4: ctrl-o # save the file
5: ctrl-x # exit nano
Once you have changed it you simply add the port designation to your ssh command when attempting to connect.
ssh username@host:port
(You may need to make firewall changes if there is one in between. It depends on the specifics of your arrangement.)
answered Nov 12, 2019 at 12:51
6
I’m working on aws cloud image which requires an ssh connection to connect. But my service provider has blocked the port 22 so I can’t connect to cloud image. So how can I change Ssh configuration to change the port number from 22 to something other?
asked Nov 12, 2019 at 12:41
1
Nowadays, you can change the SSH port on Windows 10 easily (as mentioned by others).
All you need is in this Microsoft documentation page.
Brief look at:
- Install SSH server;
- Change port in config file
%programdata%sshsshd_config
(for Windows):
- Add new firewall
rule with PowerShell running following command as Administrator:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2204
where2204
your port; - Restart your ‘SSH server’ windows service;
- (optional) Delete firewall rule for default
22
port.
answered Oct 26, 2020 at 17:47
hotenovhotenov
1911 silver badge4 bronze badges
If you are trying to change the SSH port in a Windows 10/Server 2016/2019 ,you can change the port in the below file
%programdata%sshsshd_config
Locate the line that starts with Port
and edit it there.
answered Apr 9, 2020 at 1:54
You say Windows 10 but of course Windows doesn’t natively use ssh. Though you can install bash or some other shell via the Linux Subsystem for Windows. This, I trust, is what you mean. Here are some basic instructions for changing the file containing the port information:
https://www.cyberciti.biz/faq/howto-change-ssh-port-on-linux-or-unix-server/
1: find / -name "sshd_config" 2>/dev/null
2: sudo nano /path/to/file ## probably /etc/ssh/sshd_config
3: ## locate Port 22 (removing any leading #)
4: ctrl-o # save the file
5: ctrl-x # exit nano
Once you have changed it you simply add the port designation to your ssh command when attempting to connect.
ssh username@host:port
(You may need to make firewall changes if there is one in between. It depends on the specifics of your arrangement.)
answered Nov 12, 2019 at 12:51
6
В современных версиях Windows уже есть встроенный SSH сервер на базе пакета OpenSSH. В этой статье мы покажем, как установить и настроить OpenSSH сервер в Windows 10/11 и Windows Server 2022/2019 и подключиться к нему удаленно по защищенному SSH протоколу (как к Linux).
Содержание:
- Установка сервера OpenSSH в Windows
- Настройка SSH сервера в Windows
- Sshd_config: Конфигурационный файл сервера OpenSSH
- Подключение по SSH к Windows компьютеру
- Логи SSH подключений в Windows
Установка сервера OpenSSH в Windows
Пакет OpenSSH Server включен в современные версии Windows 10 (начиная с 1803), Windows 11 и Windows Server 2022/2019 в виде Feature on Demand (FoD). Для установки сервера OpenSSH достаточно выполнить PowerShell команду:
Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH.Server*’ | Add-WindowsCapability –Online
Или при помощи команды DISM:
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0
Если ваш компьютер подключен к интернету, пакет OpenSSH.Server будет скачан и установлен в Windows.
Также вы можете установить сервер OpenSSH в Windows через современную панель Параметры (Settings -> Apps and features -> Optional features -> Add a feature, Приложения -> Управление дополнительными компонентами -> Добавить компонент. Найдите в списке OpenSSH Server и нажмите кнопку Install).
На изолированных от интернета компьютерах вы можете установить компонент с ISO образа Features On Demand (доступен в личном кабинете на сайте Microsoft: MSDN или my.visualstudio.com). Скачайте диск, извлеките его содержимое в папку c:FOD (достаточно распаковать извлечь файл
OpenSSH-Server-Package~31bf3856ad364e35~amd64~~.cab
), выполните установку из локального репозитория:
Add-WindowsCapability -Name OpenSSH.Server~~~~0.0.1.0 -Online -Source c:FOD
Также доступен MSI установщик OpenSSH для Windows в официальном репозитории Microsoft на GitHub (https://github.com/PowerShell/Win32-OpenSSH/releases/). Например, для Windows 10 x64 нужно скачать и установить пакет OpenSSH-Win64-v8.9.1.0.msi. Следующая PowerShell команда скачает MSI файл и установит клиент и сервер OpenSSH:
Invoke-WebRequest https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.9.1.0p1-Beta/OpenSSH-Win64-v8.9.1.0.msi -OutFile $HOMEDownloadsOpenSSH-Win64-v8.9.1.0.msi -UseBasicParsing
msiexec /i c:usersrootdownloadsOpenSSH-Win64-v8.9.1.0.msi
Также вы можете вручную установить OpenSSH сервер в предыдущих версиях Windows (Windows 8.1, Windows Server 2016/2012R2). Пример установки Win32-OpenSSH есть в статье “Настройка SFTP сервера (SSH FTP) в Windows”.
Чтобы проверить, что OpenSSH сервер установлен, выполните:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'
State : Installed
Настройка SSH сервера в Windows
После установки сервера OpenSSH в Windows добавляются две службы:
- ssh-agent (OpenSSH Authentication Agent) – можно использовать для управления закрытыми ключами если вы настроили SSH аутентификацию по ключам;
- sshd (OpenSSH SSH Server) – собственно сам SSH сервер.
Вам нужно изменить тип запуска службы sshd на автоматический и запустить службу с помощью PowerShell:
Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd
С помощью nestat убедитесь, что теперь в системе запущен SSH сервер и ждет подключений на порту TCP:22 :
netstat -na| find ":22"
Проверьте, что включено правило брандмауэра (Windows Defender Firewall), разрешающее входящие подключения к Windows по порту TCP/22.
Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled
Name DisplayName Description Enabled ---- ----------- ----------- ------- OpenSSH-Server-In-TCP OpenSSH SSH Server (sshd) Inbound rule for OpenSSH SSH Server (sshd) True
Если правило отключено (состоянии Enabled=False) или отсутствует, вы можете создать новое входящее правило командой New-NetFirewallRule:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Рассмотрим, где храниться основные компоненты OpenSSH:
- Исполняемые файлы OpenSSH Server находятся в каталоге
C:WindowsSystem32OpenSSH
(sshd.exe, ssh.exe, ssh-keygen.exe, sftp.exe и т.д.) - Конфигурационный файл sshd_config (создается после первого запуска службы):
C:ProgramDatassh
- Файлы authorized_keys и ssh ключи можно хранить в профиле пользователей:
%USERPROFILE%.ssh
Sshd_config: Конфигурационный файл сервера OpenSSH
Настройки сервере OpenSSH хранятся в конфигурационном файле %programdata%sshsshd_config. Это обычный текстовый файл с набором директив. Для редактирования можно использовать любой текстовый редактор (я предпочитаю notepad++). Можно открыть с помощью обычного блокнота:
start-process notepad C:Programdatasshsshd_config
Например, чтобы запретить SSH подключение для определенного доменного пользователя (и всех пользователей указанного домена), добавьте в конце файле директивы:
DenyUsers winitpro[email protected] DenyUsers corp*
Чтобы разрешить подключение только для определенной доменной группы:
AllowGroups winitprosshadmins
Либо можете разрешить доступ для локальной группы:
AllowGroups sshadmins
По умолчанию могут к openssh могут подключаться все пользователи Windows. Директивы обрабатываются в следующем порядке: DenyUsers, AllowUsers, DenyGroups,AllowGroups.
Можно запретить вход под учетными записями с правами администратора, в этом случае для выполнения привилегированных действий в SSH сессии нужно делать runas.
DenyGroups Administrators
Следующие директивы разрешают SSH доступ по ключам (SSH аутентификации в Windows с помощью ключей описана в отдельной статье) и по паролю:
PubkeyAuthentication yes PasswordAuthentication yes
Вы можете изменить стандартный SSH порт TCP/22, на котором принимает подключения OpenSSH в конфигурационном файле sshd_config в директиве Port.
После любых изменений в конфигурационном файле sshd_config нужно перезапускать службу sshd:
restart-service sshd
Подключение по SSH к Windows компьютеру
Теперь вы можете попробовать подключиться к своей Windows 10 через SSH клиент (в этом примере я использую putty).
Вы можете использовать встроенный SSH клиентом Windows для подключения к удаленному хосту. Для этого нужно в командной строке выполнить команду:
ssh [email protected]
В этом примере
alexbel
– имя пользователя на удаленном Windows компьютере, и 192.168.31.102 – IP адрес или DNS имя компьютера.
Обратите внимание что можно использовать следующие форматы имен пользователей Windows при подключении через SSH:
-
[email protected]
– локальный пользователь Windows -
[email protected]@server1
–пользователь Active Directory (в виде UPN) или аккаунт Microsoft/ Azure(Microsoft 365) -
winitpro[email protected]
– NetBIOS формат имени
В домене Active Directory можно использовать Kerberos аутентификацию в SSH. Для этого в sshd_config нужно включить параметр:
GSSAPIAuthentication yes
После этого можно прозрачно подключать к SSH сервер с Windows компьютера в домене из сессии доменного подключается. В этом случае пароль пользователя не указывается и выполняется SSO аутентификация через Kerberos:
ssh -K server1
При первом подключении появится стандартный запрос на добавление узла в список известных SSH хостов.
Нажимаем Да, и в открывшееся окне авторизуемся под пользователем Windows.
При успешном подключении запускается командная оболочка cmd.exe со строкой-приглашением.
[email protected] C:Usersadmin>
В командной строке вы можете выполнять различные команды, запускать скрипты и программы.
Я предпочитаю работать в командной строке PowerShell. Чтобы запустить интерпретатор PowerShell, выполните:
powershell.exe
Чтобы изменить командную оболочку (Shell) по умолчанию в OpenSSH с cmd.exe на PowerShell, внесите изменение в реестр такой командой:
New-ItemProperty -Path "HKLM:SOFTWAREOpenSSH" -Name DefaultShell -Value "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" -PropertyType String –Force
Осталось перезапустить SSH подключение и убедиться, что при подключении используется командный интерпретатор PowerShell (об этом свидетельствует приглашение
PS C:Usersadmin>
).
В SSH сессии запустилась командная строка PowerShell, в которой работают привычные функции: авто дополнение, раскраска модулем PSReadLine, история команд и т.д. Если текущий пользователь входит в группу локальных администраторов, то все команды в его сессии выполняются с повышенными правами даже при включенном UAC.
Логи SSH подключений в Windows
В Windows логи подключений к SSH серверу по-умолчанию пишутся не в текстовые файлы, а в отдельный журнал событий через Event Tracing for Windows (ETW). Откройте консоль Event Viewer (
eventvwr.msc
>) и перейдите в раздел Application and services logs -> OpenSSH -> Operational.
При успешном подключении с помощью к SSH серверу с помощью пароля в журнале появится событие:
EventID: 4 sshd: Accepted password for root from 192.168.31.53 port 65479 ssh2
Если была выполнена аутентификация с помощью SSH ключа, событие будет выглядеть так:
sshd: Accepted publickey for locadm from 192.168.31.53 port 55772 ssh2: ED25519 SHA256:FEHDEC/J72Fb2zC2oJNb45678967kghH43h3bBl31ldPs
Если вы хотите, чтобы логи писались в локальный текстовый файл, нужно в файле sshd_config включить параметры:
SyslogFacility LOCAL0 LogLevel INFO
Перезапустите службу sshd и провеьте, что теперь логи SSH сервера пишутся в файл C:ProgramDatasshlogssshd.log
По умолчанию SSH-сервер открывает для входящих соединений 22 TCP-порт, и тем самым вызывает потенциальную угрозу bruteforce-атак, поскольку злоумышленник обнаружив на сервере такой открытый порт, пытается подобрать пароль к удалённому серверу при помощи специальных средств автоматизации.
В этой статье мы опишем, как сконфигурировать SSH-сервер на альтернативном порту.
Особо отметим, что не стоит воспринимать описанный здесь метод, как панацею. Китайская мудрость гласит — «Security by Obscurity is no Security at all». Не забывайте и про другие методы защиты SSH, такие как правильная настройка межсетевого экрана, разрешение доступа только ограниченному набору IP-адресов, отказ от парольной аутентификации и использование ключей RSA/DSA, и т.п.
Конфиг SSH-сервера обычно располагается в /etc/ssh/sshd_config. Для редактирования этого файла вам потребуются привилегии суперпользователя root, или возможность выполнить sudo для получения таких привилегий текстовым редактором.
Выполните команду, например:
nano /etc/ssh/sshd_config
В открывшемся файле найдите следующую строку:
Port 22
Закомментируйте её и добавьте новую строку со случайным номером порта, например 58291. Номер порта не должен превышать 65535. Также удостоверьтесь, что выбранное вами значение не конфликтует с другими сервисами в системе, например mysqld использует порт 3306, httpd — 80, ftpd — 21. Рекомендуем выбрать пятизначное значение.
На всякий случай, для просмотра уже открытых в системе портов, выполните следующую команду:
netstat -tupln | grep LISTEN
После модификации, участок файла конфигурации SSH должен выглядеть примерно так:
#Port 22 Port 58291
Что-бы SSH-сервер начал слушать новый порт вместо прежнего, его нужно перезапустить:
/etc/init.d/ssh restart
или
/etc/init.d/sshd restart
Соединение с SSH-сервером на альтернативном порту
Итак, теперь когда у нас есть SSH-сервер, слушающий альтернативный порт, как с ним соединяться? Если вы попытаетесь соединиться при помощи командной строки Linux, то по умолчанию SSH-клиент попытается использовать стандартный порт, и это приведёт к ошибке подключения:
ssh putty.org.ru ssh: connect to host putty.org.ru port 22: Connection refused
Вместо этого вы должны передать SSH-клиенту номер порта значением параметра -p
, примерно так:
ssh -p 58291 putty.org.ru
Теперь соединение пройдёт успешно.
Если вы используете свободный SSH-клиент PuTTY, то укажите порт в настройках сессии, как показано на картинке:
Previous Story
Ansible: ввод sudo-пароля при выполнении playbook
Next Story
MikroTik Mesh – единая WiFi сеть
Latest from Blog
To get started with Docker Engine on Debian, make sure you meet the prerequisites, then install Docker. Prerequisites
Рассмотрим установку GitLab-сервера в контейнере через docker compose на виртуальном сервере Ubuntu 20.04 LTS, подключение используется
В данной статье рассматриваются инструменты, советы с примерами по переходу от устаревшего канального драйвера chan_sip на новый chan_pjsip/res_pjsip, который
Однажды вам обязательно понадобится проверить используемый порт определенного сервиса (или наоборот, найти сервисы, слушающие конкретный порт)
Помимо таких долгожданных функций как Иерархическая адресная книга и официальная поддержка Ubuntu 18.10 LTS, релиз Zimbra
Если вы не проводили никаких манипуляций со своим портом, то, скорее всего, номер порта SSH у вас стандартный — 22.
Как вы, наверное, знаете, SSH — это механизм безопасной передачи сетевых пакетов между сервером и операционной системой. Он занимается шифровкой всей информации, передающейся в сети. Его основное предназначение — это:
- управление пользовательскими данными на сервере;
- служебный запуск команд;
- консольный режим работы с базой данных;
- и др.
Из чего состоит протокол SSH
Протокол SSH состоит из 2-х основных компонентов:
- Клиент SSH;
- Сервер SSH.
Клиент SSH — это та программа на вашем компьютере, с помощью которой вы можете получить доступ к используемому серверу. Данная программа бывает как с графическим интерфейсом, то есть в виде обычного приложения, так и без — тогда все команды по настройке передаются через консоль (терминал). Должен быть установлен на компьютере, с которого планируется управление сервером.
Сервер SSH — ожидает сетевое подключение пользователя, и когда получает от него запрос на соединение, воспроизводит все нужные манипуляции, чтобы авторизовать данного пользователя. Может быть запущен на удаленной машине.
Соответственно, сам протокол SSH — это взаимодействие между клиентом и сервером, через которое могут передаваться любые файлы, может осуществляться работа консоли или запуск программ и др.
Ка посмотреть номер открытого порта SSH
Чтобы посмотреть номер открытого порта SSH, можно использовать различные утилиты, предназначенные для этого. Самые популярные из них мы приведем чуть ниже.
Открытый порт SSH подразумевает, что он используется каким-нибудь сервисом или программой для передачи данных по сети. Простые и популярные утилиты, чтобы посмотреть номер открытого порта:
- NetStat. Определяет открытый порт протокола SSH и все соединения в сети в онлайн—режиме.
- SS. Данная программка работает непосредственно с подсистемами ядер, поэтому осуществляет свою работу несколько быстрее и точнее своих конкурентов. Но если вы хотите посмотреть только номер открытого порта, то скорость ее работы не имеет большой важности.
- Lsoft. Также легко покажет номер любого порта SSH и не только.
- Nmap. Делает то же самое, что и предыдущие, но сам по себе является мощным сетевым сканером, который профессионально тестирует и сканирует вашу сеть.
- Zenmap. По сути этот же Nmap с абсолютно с той же функциональностью. Но различие в том, что здесь добавляется удобный визуальный интерфейс.
Абсолютно любой из предложенных инструментов можно использовать, чтобы определить открытый порт протокола SSH и не только. Так как перечень данных утилит используется профессиональными администраторами серверов.
Как поменять номер порта SSH на другой?
Как мы уже говорили в самом начале, по умолчанию используется 22-й порт. Но это не очень хорошо с точки зрения безопасности. Так как стандартный номер порта SSH сильно повышает риск брутфорс-атак. Поэтому смена порта со стандартного немного повышает безопасность вашего сетевого соединения. Обычно конфигурация портов находится по следующему пути настройки сервера: «/etc/ssh/sshd_config».
Чтобы поменять номер порта SSH, нужно:
- Проверить список открытых портов одной из утилит, предложенных выше, чтобы не занимать уже и так открытые порты.
- Подключиться к серверу с рут-правами по SSH.
- Открыть файл sshd_config любым имеющимся редактором текста.
- Найти запись «port 22» или любую другую, которую хотите изменить.
- Изменить на нужный номер порта SSH и сохранить.
- Перезагрузить сервер, чтобы новые конфигурации заработали.
Как вы заметили, сменить номер порта SSH не так сложно, но это сможет повысить защищенность серверного соединения. Поэтому менять номер порта SSH протокола всегда рекомендуется при настройке нового сервера.
How SSH port became 22
The default SSH port is 22. It is not a coincidence. This is a story of how it got that port.
When I (Tatu Ylonen first published this story in April 2017, it went viral and got about 120,000 readers in three days.
The story of getting SSH port 22
I wrote the initial version of SSH (Secure Shell) in Spring 1995. It was a time when telnet and FTP were widely used.
Anyway, I designed SSH to replace both telnet
(port 23) and ftp
(port 21). Port 22 was free. It was conveniently between the ports for telnet
and ftp
. I figured having that port number might be one of those small things that would give some aura of credibility. But how could I get that port number? I had never allocated one, but I knew somebody who had allocated a port.
The basic process for port allocation was fairly simple at that time. Internet was smaller and we were in the very early stages of the Internet boom. Port numbers were allocated by IANA (Internet Assigned Numbers Authority). At the time, that meant an esteemed Internet pioneer called Jon Postel and Joyce K. Reynolds. Among other things, Jon had been the editor of such minor protocol standards as IP (RFC 791), ICMP (RFC 792), and TCP (RFC 793). Some of you may have heard of them.
To me Jon felt outright scary, having authored all the main Internet RFCs!
Anyway, just before announcing ssh-1.0
in July 1995, I sent this e-mail to IANA:
From ylo Mon Jul 10 11:45:48 +0300 1995 From: Tatu Ylonen <ylo@cs.hut.fi>
To: Internet Assigned Numbers Authority <iana@isi.edu>
Subject: request for port number
Organization: Helsinki University of Technology, Finland
Dear Sir, I have written a program to securely log from one machine into another over an insecure network.
It provides major improvements in security and functionality over existing telnet and rlogin protocols
and implementations. In particular, it prevents IP, DNS and routing spoofing. My plan is to distribute
the software freely on the Internet and to get it into as wide use as possible. I would like to get a registered
privileged port number for the software.The number should preferably be in the range 1-255 so that it can be used in the WKS field in name servers.
I'll enclose the draft RFC for the protocol below. The software has been in local use for several months,
and is ready for publication except for the port number. If the port number assignment can be arranged in time,
I'd like to publish the software already this week. I am currently using port number 22 in the beta test.
It would be great if this number could be used (it is currently shown as Unassigned in the lists).
The service name for the software is "ssh" (for Secure Shell).
Yours sincerely, Tatu Ylonen <ylo@cs.hut.fi> ... followed by protocol specification for ssh-1.0
The next day, I had an e-mail from Joyce waiting in my mailbox:
Date: Mon, 10 Jul 1995 15:35:33 -0700 From: jkrey@ISI.EDU To: ylo@cs.hut.fi Subject: Re: request for port number
Cc: iana@ISI.EDU Tatu, We have assigned port number 22 to ssh, with you as the point of contact. Joyce
There we were! SSH port was 22!!!
On July 12, 1995, at 2:32am, I announced a final beta version to my beta testers at Helsinki University of Technology. At 5:23pm I announced ssh-1.0.0 packages to my beta testers. At 5:51pm on July 12, 1995, I sent an announcement about SSH (Secure Shell) to the cypherpunks@toad.com
mailing list. I also posted it to a few newsgroups, mailing lists, and directly to selected people who had discussed related topics on the Internet.
Changing the SSH port in the server
By default, the SSH server still runs in port 22. However, there are occasions when it is run in a different port. Testing use is one reason. Running multiple configurations on the same host is another. Rarely, it may also be run without root privileges, in which case it must be run in a non-privileged port (i.e., port number >= 1024).
The port number can be configured by changing the Port 22
directive in /etc/ssh/sshd_config. It can also be specified using the -p <port>
option to sshd. The SSH client and sftp programs also support the -p <port>
option.
Specifying SSH port number on the command line
The -p <port>
option can be used to specify the port number to connect to when using the ssh
command on Linux. The -P <port>
(note: capital P) option can be used with SFTP and scp
. The SSH port number command line setting overrides any value configured in configuration files.
Configuring SSH access through firewalls
SSH is one of the few protocols that are frequently permitted through firewalls. Unrestricted outbound SSH is very common, especially in smaller and more technical organizations. Inbound SSH is usually restricted to one or very few servers.
Outbound SSH
Configuring outbound SSH in a firewall is very easy. If there are restrictions on outgoing traffic at all, just create a rule that allows TCP port 22 to go out. That is all. If you want to restrict the destination addresses, you can also limit the rule to only permit access to your organization’s external servers in the cloud, or to a jump server that guards cloud access.
Back-tunneling is a risk
Unrestricted outbound SSH can, however, be risky. The SSH protocol supports tunneling. The basic idea is that it is possible to have the SSH server on an external server listen to connections from anywhere, forward those back into the organization, and then make a connection to some Internal server.
This can be very convenient in some environments. Developers and system administrators frequently use it to open a tunnel that they can use to gain remote access from their home or from their laptop when they are travelling.
However, it generally violates policy and takes control away from firewall administrators and the security team. It can, for example, violate PCI, HIPAA, or NIST SP 800-53. It can be used by hackers and foreign intelligence agencies to leave backdoors into organizations
Inbound SSH access
For inbound access, there are a few practical alternatives:
-
Configure firewall to forward all connections to port 22 to a particular IP address on the internal network or DMZ.
-
Use different ports on the firewall to access different servers.
-
Only allow SSH access after you have logged in using a VPN (Virtual Private Network), typically using the IPsec protocol.
Enabling SSH access via iptables
Iptables is a host firewall built into the Linux kernel. It is typically configured to protect the server by preventing access to any ports that have not been expressly opened.
If iptables
is enabled on the server, the following commands can be used to permit incoming SSH access. They must be run as root.
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
If you want to save the rules permanently, on some systems that can be done with the command:
service iptables save