it-swarm-ru.tech

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

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

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

54
Alexander Artemenko

Каждый предыдущий ответ работает (как и 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 или используя эта ссылка .

62
drAlberT

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

Пример:

<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>
17
raimue

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

  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. Запустите обычную настройку, сделайте и сделайте установку для установки 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, метод services или любой другой метод лучше, элегантнее или хуже другого.

Вы также можете легко подготовить скрипт, который запускается при запуске, чтобы перестраивать перенаправление 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 слушать только на петлю.

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

6
Cedric

Я нигде не мог правильно описать это на справочной странице, но если вы хотите сделать что-то большее, чем просто добавить дополнительного слушателя, вы можете использовать массив слушателей и иметь дополнительный голос. Это не требует редактирования/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>
1
Adam Prescott