Назад | Перейти на главную страницу

Как изменить порт ssh в Mac OS X?

Я хочу изменить какой порт sshd использует на сервере Mac. Например, скажем, с порта 22 на порт 32.

Редактирование /etc/sshd_config похоже не работает. Кто-нибудь знает как его поменять? Я бы предпочел метод, совместимый со всеми версиями OSX (или, по крайней мере, с максимально возможным количеством).

Каждый предыдущий ответ работает (как предлагает Google), но они грязный и неизящный.

Правильный способ изменить порт прослушивания для службы, обрабатываемой при запуске, в Mac OS X - это внести изменения в специальные клавиши, доступные в ssh.plist

Таким образом, решение очень простое - использовать номер порта вместо имени службы.

Отрывок из моей отредактированной /System/Library/LaunchDaemons/ssh.plist:

    <key>Sockets</key>
    <dict>
            <key>Listeners</key>
            <dict>
                    <key>SockServiceName</key>
                    <string>22022</string>
                    <key>SockFamily</key>
                    <string>IPv4</string>
                    <key>Bonjour</key>
                    <array>
                            <string>22022</string>
                    </array>
            </dict>
    </dict>

Примечание: чтобы иметь возможность редактировать этот файл в El Capitan, Sierra и, возможно, в будущих версиях, вам необходимо отключить SIP (Защита целостности системы). Видеть Как отключить защиту целостности системы (SIP) [...].

Вышеупомянутое редактирование также заставит sshd прослушивать только IPV4.

После внесения любых изменений в ssh.plist, файл необходимо перезагрузить следующим образом:

sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist

Обратите внимание, что использование launchctl stop ... и launchctl start ... НЕ будет перезагружать этот файл.

Страницу руководства с дополнительной информацией можно найти, набрав man launchd.plist или используя эта ссылка.

Если вы хотите, чтобы sshd прослушивал дополнительный порт, вы можете добавить несколько записей в словарь сокетов.

Пример:

<key>Sockets</key>
<dict>
        <key>Listeners</key>
        <dict>
                <key>SockServiceName</key>
                <string>ssh</string>
                <key>Bonjour</key>
                <array>
                        <string>ssh</string>
                        <string>sftp-ssh</string>
                </array>
        </dict>
        <key>Listeners2</key>
        <dict>
                <key>SockServiceName</key>
                <string>22022</string>
        </dict>
</dict>

Из того, что я прочитал (и испытал) до сих пор, есть три основных метода, которые можно использовать:

  1. измените настройку в файле ssh.plist;
  2. измените настройку в файле / etc / services;
  3. измените настройку в файле /etc/sshd.conf.

Другой способ сделать это, который я лично предпочитаю всем и каждому из этих методов, потому что он позволяет избежать возни с системными файлами Mac OS X, - это использовать socat для перенаправления порта 22 на любой порт, который вы хотите.

  1. Скачать socat: http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
  2. Переместите файл tar.gz в ваш каталог / usr / local / (sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz)
  3. Перейдите в ваш каталог / usr / local / bin (cd /usr/local/bin)
  4. Распаковать: sudo tar -xvzf socat-1.7.3.2.tar.gz
  5. Перейдите в каталог с несжатым файлом: cd ./socat-1.7.3.2
  6. Запустите обычную configure, make и make install, чтобы установить socat (sudo ./configure && sudo make && sudo make install)
  7. Перенаправьте порт 22 (по умолчанию ssh) на любой порт, который вы хотите (в следующем примере, 2222), используя правильный вариант, отправив вызов socat (sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22)

Все готово, и ваши системные файлы Mac OS X остались без изменений. Кроме того, этот метод работает не только на Snow Leopard, но и на всех версиях Mac OS X, а также на любой машине, на которой может работать socat.

Последнее, что вам нужно сделать, если вы используете маршрутизатор / брандмауэр, - это включить правильные команды перенаправления в свой маршрутизатор / брандмауэр.

Кроме того, он позволяет избежать споров о том, лучше, элегантнее или хуже метод ssh.plist, метод служб или любой другой метод.

Вы также можете легко подготовить сценарий, который запускается при запуске, чтобы восстанавливать перенаправление socat при каждом перезапуске компьютера. Поместите это в /Library/LaunchDaemons/com.serverfault.sshdredirect.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.serverfault.sshdredirect</string>
    <key>KeepAlive</key>
    <dict>
        <key>NetworkState</key>
        <true/>
    </dict>
    <key>RunAtLoad</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/socat</string>
        <string>TCP-LISTEN:2222,reuseaddr,fork</string>
        <string>TCP:localhost:22</string>
    </array>
</dict>
</plist>

Использовать sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plist чтобы загрузить это. Он будет автоматически загружаться при следующих перезагрузках.

Кроме того, вы также можете повысить безопасность, (i) настроив брандмауэр так, чтобы он блокировал любые подключения к вашему порту 22 из любого интерфейса, кроме loopback (127.0.0.1) и (ii) сделав аналогичное изменение в вашем файле sshd.conf, чтобы пусть ssh прослушивает только петлю.

Наслаждаться.

Я не мог увидеть это должным образом задокументировано на странице руководства, но если вы не хотите делать ничего, кроме добавления дополнительного слушателя, вы можете использовать массив слушателей и иметь дополнительный диктант. Это не требует редактирования / etc / services, если вы используете порт напрямую (но не забудьте открыть порт на вашем брандмауэре!)

    <key>Listeners</key>
    <array>
    <dict>
        <key>Bonjour</key>
        <array>
            <string>ssh</string>
            <string>sftp-ssh</string>
        </array>
        <key>SockServiceName</key>
        <string>ssh</string>
    </dict>
    <dict>
        <key>SockServiceName</key>
        <string>22222</string>
    </dict>
    </array>