Як змінити порт 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 у / Система / Бібліотека / LaunchDaemons
Martijn Pieters

1
Зауважу, що вам потрібно або перезапустити машину, або перезапустити службу ssh запуск.
Danny Staple

5
Grr ... кожне оновлення OS X (Yosemite в даному випадку) відкидає цю зміну, вимагаючи від мене запам'ятати, що я робив останній раз, щоб виправити її, і де я знайшов цю інформацію. Дякуємо за виправлення!
Майкл

2
@Hassan вам потрібно запустити два екземпляри 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?

Я також хотів би дізнатися, яка мета ключа Бонжура?
Дрю

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

Крім того, ви також можете покращити безпеку, встановивши брандмауер для блокування будь-яких з'єднань зі своїм портом 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/>.
RTS - читайте про Моніку Селліо

з останньою 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 Я думаю, що це помилка копіювання-вставки, коли я встановлював це разом від інших слухачів.
Адам Прескотт

Я також хотів би дізнатися, яка мета ключа Бонжура?
Дрю

1
Призначення ключа Bonjour: Цей необов'язковий ключ можна використовувати для запиту реєстрації послуги в підсистемі Bonjour. Як розповів man launchd.plist.
Скотт Віллеке
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.