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


53

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

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


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

Ответы:


61

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


3
@Yar launchd.plist - это название руководства. Изменение находится в файле ssh.plist в / System / Library / LaunchDaemons
Martijn Pieters

1
Я отмечаю, что вам нужно либо перезагрузить компьютер, либо перезапустить службу ssh с помощью launchctl.
Дэнни Стейпл

5
Грр ... каждое обновление OS X (в данном случае Yosemite) отменяет это изменение, заставляя меня вспомнить, что я делал в последний раз, чтобы это исправить, и где я нашел эту информацию. Спасибо за исправление!
Майкл

2
@ Хассан, тебе нужно запустить два экземпляра ssh .. т.е. добавить еще одного слушателя с другим именем и значением
SockServiceName

5
Обратите внимание, что в версии El Capitan (и, вероятно, также в будущих версиях) вам необходимо отключить SIP (защиту целостности системы), прежде чем вы сможете редактировать файл, см .: apple.stackexchange.com/a/208481
jcfrei

17

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

1
Для ясности @Raim имеет в виду:/System/Library/LaunchDaemons/ssh.plist
Майк Каузер

Какова цель ключа Bonjour?

Я также хотел бы знать, какова цель ключа Bonjour?
Дрю

Какого черта 20022?
Джейми Хатбер

1
Назначение ключа Bonjour. Этот необязательный ключ можно использовать для запроса регистрации службы в подсистеме Bonjour. Как рассказал man launchd.plist.
Скотт Виллек

6

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

  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, метод 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 слушать только по петле.

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


2
Редактировать /etc/servicesфайл - плохая идея - это повлияет на такие вещи, как вход с помощью SSH-ключа в ваши учетные записи github или bitbucket, которые будут пытаться подключиться к новому порту и потерпеть неудачу.
ccpizza

1
Вы должны построить в пустом каталоге. Затем используйте sudoдля установки. Вы не должны строить с повышенными привилегиями.

Это также работает в El Capitan, где SIP затрудняет изменение /System/Library/LaunchDaemons/ssh.plist. Но в El Capitan ключ "NetworkState" устарел; Я предлагаю <key>KeepAlive</key><true/>.
РТС - читайте о Монике Челлио

с последней версией osx sierra, рабочая версия: gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd
Shanmu

1

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

Я также хотел бы знать, какова цель ключа Bonjour?
Дрю

1
Назначение ключа Bonjour. Этот необязательный ключ можно использовать для запроса регистрации службы в подсистеме Bonjour. Как рассказал man launchd.plist.
Скотт Виллек
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.