Введение / Зачем это нужно
Стандартный порт SSH (22) хорошо известен злоумышленникам и часто подвергается автоматическим атакам. Смена порта на нестандартный — простой и эффективный способ повысить безопасность вашего сервера, отсекая случайные сканирования. В этом гайде вы измените порт SSH на macOS, сохранив полную функциональность удаленного доступа.
Требования / Подготовка
- Компьютер с macOS (рекомендуется версия 11.0 Big Sur или новее).
- Административные права (пароль для
sudo). - Терминал (встроенное приложение «Терминал» или iTerm2).
- Убедитесь, что SSH-сервер установлен (он встроен в macOS) и, желательно, уже запущен.
Шаг 1: Проверьте статус SSH-сервера
Сначала убедитесь, что SSH-сервер (демон sshd) активен. Откройте Терминал и выполните:
sudo systemsetup -getremotelogin
Если вы видите Remote Login: On — сервер работает. Если Remote Login: Off, включите его:
sudo systemsetup -setremotelogin on
💡 Совет: После включения может потребоваться 5-10 секунд, прежде чем сервер начнет слушать порт.
Шаг 2: Создайте резервную копию конфигурационного файла
Перед редактированием системного файла создайте его резервную копию. Это позволит быстро восстановить настройки, если что-то пойдет не так.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
Шаг 3: Измените порт в конфигурации SSH
Основной конфигурационный файл SSH-сервера — /etc/ssh/sshd_config. Откройте его в текстовом редакторе (например, nano):
sudo nano /etc/ssh/sshd_config
В открывшемся файле найдите строку, начинающуюся с #Port 22. Уберите символ комментария (#) и измените 22 на желаемый порт. Например:
Port 2222
Выбирайте порт в диапазоне 1024–65535, который не занят другими службами. Избегайте портов, зарезервированных для распространенных сервисов (например, 3306 для MySQL, 5432 для PostgreSQL).
Сохраните изменения: в nano нажмите Ctrl+O, затем Enter, и выйдите (Ctrl+X).
⚠️ Важно: Убедитесь, что в файле нет других строк с директивой
Port. Если такие строки есть, закомментируйте их (добавьте#в начало) или удалите, оставив только одну активную.
Шаг 4: Перезапустите SSH-сервис
Чтобы изменения вступили в силу, перезапустите SSH-демон. Выполните в Терминале:
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
Эти команды выгружают и заново загружают службу SSH, применяя новую конфигурацию.
💡 Совет: На очень старых версиях macOS (до 10.10) могут потребоваться другие команды:
sudo launchctl stop com.openssh.sshdиsudo launchctl start com.openssh.sshd.
Шаг 5: Проверьте, что SSH слушает на новом порту
Убедитесь, что SSH-сервер теперь слушает на указанном вами порту:
sudo lsof -i -P | grep LISTEN | grep ssh
В выводе должна появиться строка, содержащая ваш порт (например, *:2222). Если порт не отображается, перепроверьте конфигурационный файл и перезапустите службу.
Также попробуйте подключиться локально, чтобы убедиться в работоспособности:
ssh -p 2222 username@localhost
Замените 2222 на ваш порт и username на ваше имя пользователя macOS. При успешном подключении вы увидите приглашение командной строки.
Возможные проблемы
Ошибка: «Connection refused» или «Connection timeout»
- Причина: SSH-сервер не запущен или не слушает на указанном порту.
- Решение: Проверьте статус сервера (Шаг 1) и правильность порта (Шаг 5). Убедитесь, что в конфиге только одна директива
Port.
Ошибка: «Permission denied (publickey,password)»
- Причина: Неверные учетные данные или отсутствие настроенных SSH-ключей.
- Решение: Проверьте логин и пароль. Если используете ключи, убедитесь, что публичный ключ добавлен в
~/.ssh/authorized_keysи имеет права600.
Брандмауэр блокирует подключение
- Причина: Если вы настраивали правила брандмауэра вручную (например, через
pf), новый порт может быть заблокирован. - Решение: Добавьте правило для нового порта в
/etc/pf.confи перезагрузитеpf:
Заменитеecho "pass in proto tcp from any to any port 2222" | sudo pfctl -f - sudo pfctl -e2222на ваш порт. Если используете стандартный application firewall (Системные настройки → Защита и безопасность → Брандмауэр), он работает по приложению, а не по порту. Поэтому, если SSH уже разрешен, порт открыт автоматически.
Не удается подключиться с удаленного компьютера
- Причина: Роутер или облачный провайдер не пропускает трафик на новый порт.
- Решение: Настройте проброс портов (port forwarding) на роутере или в панели управления облачного сервиса (AWS Security Groups, Google Cloud Firewall Rules) для нового порта.
После смены порта SSH больше не работает
- Причина: Синтаксическая ошибка в конфигурационном файле или конфликт портов.
- Решение: Восстановите резервную копию:
Затем проверьте конфиг на синтаксис:sudo cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plistsudo sshd -t(выведет ошибки, если есть).
SIP (System Integrity Protection) мешает редактированию?
- Причина: Начиная с macOS El Capitan, SIP защищает системные файлы. Однако
/etc/ssh/sshd_configне защищен и редактируется сsudoбез проблем. Если вы столкнулись с ошибкой доступа, убедитесь, что используетеsudoи правильный путь.
Проверка результата
После выполнения всех шагов вы должны успешно подключаться к SSH-серверу на новом порту. Проверьте:
- Локальное подключение:
ssh -p <новый_порт> username@localhost. - Удаленное подключение (если нужно): с другого устройства используйте
ssh -p <новый_порт> username@ваш_ip.
Если оба способа работают, порт успешно изменен.
Дополнительные рекомендации
- Обновите все скрипты, конфигурации и закладки, где используется SSH, указав новый порт.
- Рассмотрите использование SSH-ключей вместо паролей для дополнительной безопасности.
- Регулярно обновляйте macOS и пакеты OpenSSH через «Системные настройки → Обновление ПО».
- Для еще большей безопасности настройте fail2ban или подобные инструменты для блокировки повторяющихся попыток входа.
Теперь ваш SSH-сервер на macOS работает на нестандартном порту, что значительно снижает риски автоматических атак. Не забывайте запомнить новый порт и обновлять клиентские настройки.