Вопрос: Как изменить порт sshd на Mac OS X?


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

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


51
2018-06-03 14:19


Источник


Также отметим, что /usr/libexec/sshd-keygen-wrapper (показано ниже на рисунках), можно запустить другой SSH, чем указано в самом plist. Если вы кота это, он всегда начинается /usr/sbin/sshd, - jww


Ответы:


Каждый предыдущий ответ работает (как подсказывает 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 (System Integrity Protection). Видеть Как отключить защиту целостности системы (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 или использования эта ссылка,


61
2017-09-22 09:52



@Yar launchd.plist - это название руководства. Это изменение находится в файле ssh.plist в / System / Library / LaunchDaemons - Martijn Pieters
Я отмечаю, что вам нужно либо перезапустить машину, либо перезапустить службу ssh с помощью launchctl. - Danny Staple
Grr ... каждое обновление ОС X (Yosemite в этом случае) отбрасывает это изменение, требуя, чтобы я помнил, что я сделал в последний раз, чтобы исправить его, и где я нашел эту информацию. Спасибо за исправление! - Michael
@ Хассан, вам нужно запустить два экземпляра ssh .. например, добавить другого прослушивателя с другим именем и значением SockServiceName - drAlberT
Обратите внимание, что в версии El Capitan (и, вероятно, в будущих версиях) вам необходимо отключить SIP (System Integrity Protection), прежде чем вы сможете редактировать файл, см. apple.stackexchange.com/a/208481 - jcfrei


Если вы хотите, чтобы 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>

17
2017-09-28 16:41



Для ясности @Raim имеет в виду: /System/Library/LaunchDaemons/ssh.plist - Mike Causer
Какова цель ключа Bonjour? - jww
Я тоже хотел бы узнать, какова цель ключа Bonjour? - Drew
Какого черта 20022? - Jamie Hutber


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

  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. Запустите обычную настройку, 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 прослушивает только loopback.

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


6
2017-12-22 10:46



Редактирование /etc/services файл - плохая идея - он затронет такие вещи, как SSH-ключ для входа в ваши аккаунты github или bitbucket, которые будут пытаться подключиться к новому порту и выйти из строя. - ccpizza
Вы должны создать каталог с нуля. Затем используйте sudo установить. Вы не должны строить с повышенными привилегиями. - jww
Это также работает на El Capitan, где SIP затрудняет смену /System/Library/LaunchDaemons/ssh.plist. Но на El Capitan ключ «NetworkState» устарел; Я предлагаю <key>KeepAlive</key><true/>, - Robert Tupelo-Schneck
с последней osx sierra, рабочая версия: gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd - Shanmu


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



Какова цель ключа Bonjour? - jww
@jww Я думаю, что это ошибка копирования-вставки, когда я собирал это вместе с другими слушателями. - Adam Prescott
Я тоже хотел бы узнать, какова цель ключа Bonjour? - Drew