как изменить порт ssh в mac os x?

<p>я хочу изменить, какой порт <code>sshd</code> использует на сервере mac. например, скажем, с порта 22 на порт 32.</p><p>редактирование <code>/etc/sshd\_config</code> не похоже на работу. кто-нибудь знает, как это изменить? я бы предпочел метод, который совместим со всеми версиями osx (или, по крайней мере, с максимально возможным количеством).</p>

<p>каждый предыдущий ответ работает (как и google предлагает), но они <strong> <em> грязные и не элегантные</em> </strong>.</p><blockquote> <p>правильный способ изменить порт прослушивания для запускаемой службы в mac os x - это сделать изменения выделенными ключами доступными в <code>ssh.plist</code></p> </blockquote><p>таким образом, решение так же просто, как использовать номер порта вместо имени службы.</p><p>отрывок из моего отредактированного <code>/system/library/launchdaemons/ssh.plist</code>:</p><pre><code> <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> </code></pre><p><strong> примечание: </strong>, чтобы иметь возможность редактировать этот файл в el capitan, sierra и, возможно, в будущих версиях, необходимо отключить sip (защита целостности системы). см. <a href="https://apple.stackexchange.com/a/208481">как отключить защиту целостности системы (sip) [...]</a> .</p><p>приведенное выше редактирование также заставит sshd прослушивать только через ipv4.</p><p>после внесения любых изменений в <code>ssh.plist</code>, файл должен быть перезагружен следующим образом:</p><pre><code>sudo launchctl unload /system/library/launchdaemons/ssh.plist sudo launchctl load /system/library/launchdaemons/ssh.plist </code></pre><p>обратите внимание, что с помощью <code>launchctl stop ...</code> а также <code>launchctl start ...</code> не перезагрузит этот файл.</p><p>справочную страницу с дополнительной информацией можно найти, набрав <code>man launchd.plist</code> или используя <a href="http://developer.apple.com/mac/library/documentation/darwin/reference/manpages/man5/launchd.plist.5.html">эта ссылка</a> .</p>

<p>если вы хотите, чтобы sshd прослушивал дополнительный порт, вы можете добавить несколько записей в словарь sockets.</p><p>пример:</p><pre><code><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> </code></pre>

<p>из того, что я прочитал (и испытал) до сих пор, есть три основных метода, которые можно использовать:</p><ol> <li>изменить настройки в файле ssh.plist;</li> <li>измените настройку в файле/etc/services;</li> <li>измените настройку в файле /etc/sshd.conf.</li> </ol><p>еще один способ сделать это, который я лично предпочитаю всем и каждому из этих методов, потому что он избегает возиться с системными файлами mac os x, - это использовать socat для перенаправления порта 22 на любой порт, который вы хотите.</p><ol> <li>загрузить socat: <a href="http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz">http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz</a> </li> <li>переместите файл tar.gz в каталог/usr/local/(<code>sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz</code>)</li> <li>перейдите в каталог/usr/local/bin (<code>cd /usr/local/bin</code>)</li> <li>распаковать: <code>sudo tar -xvzf socat-1.7.3.2.tar.gz</code></li> <li>переместитесь в несжатый каталог файлов: <code>cd ./socat-1.7.3.2</code></li> <li>запустите обычную настройку, сделайте и сделайте установку для установки socat (<code>sudo ./configure && sudo make && sudo make install</code>)</li> <li>перенаправьте порт 22 (по умолчанию ssh) на любой порт, который вы хотите (в следующем примере, 2222), используя правильную опцию, отправив вызов socat (<code>sudo socat tcp-listen:2222,reuseaddr,fork tcp:localhost:22</code>)</li> </ol><p>вы сделали, и ваши системные файлы mac os x остались без изменений. кроме того, этот метод работает не только на snow leopard, но и на всех версиях mac os x, а также на любой машине, на которой может работать socat.</p><p>последнее, что вам нужно сделать, если вы используете маршрутизатор/брандмауэр, это включить правильные команды перенаправления в ваш маршрутизатор/брандмауэр.</p><p>кроме того, это позволяет избежать застревания в дискуссии, является ли метод ssh.plist, метод services или любой другой метод лучше, элегантнее или хуже другого.</p><p>вы также можете легко подготовить скрипт, который запускается при запуске, чтобы перестраивать перенаправление socat при каждой перезагрузке компьютера. поместите это в <code>/library/launchdaemons/com.serverfault.sshdredirect.plist</code>:</p><pre class="lang-xml prettyprint-override"><code><?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> </code></pre><p>используйте <code>sudo launchctl load -w /library/launchdaemons/com.serverfault.sshdredirect.plist</code> чтобы загрузить его. он будет автоматически загружаться при будущих перезагрузках.</p><p>кроме того, вы также можете повысить безопасность, настроив (i) брандмауэр на блокировку любых подключений к вашему порту 22 с любого другого интерфейса, кроме loopback (127.0.0.1), и (ii) внесите аналогичное изменение в свой файл sshd.conf для иметь ssh слушать только на петлю.</p><p>наслаждаться.</p>

<p>я нигде не мог правильно описать это на справочной странице, но если вы хотите сделать что-то большее, чем просто добавить дополнительного слушателя, вы можете использовать массив слушателей и иметь дополнительный голос. это не требует редактирования/etc/services, если вы используете порт напрямую (но не забудьте открыть порт на брандмауэре!)</p><pre><code> <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> </code></pre>