Wie ändere ich den sshd-Port unter Mac OS X?


53

Ich möchte ändern, welcher Port sshdauf einem Mac-Server verwendet wird. Zum Beispiel von Port 22 nach Port 32.

Die Bearbeitung /etc/sshd_configscheint nicht zu funktionieren. Weiß jemand, wie man es ändert? Ich würde eine Methode vorziehen, die mit allen OSX-Versionen kompatibel ist (oder zumindest mit so vielen wie möglich).


Beachten Sie auch, dass /usr/libexec/sshd-keygen-wrapper(in den folgenden Listen gezeigt) eine andere SSH starten kann als in der Liste selbst angegeben. Wenn Sie es katzen, fängt es immer an /usr/sbin/sshd.

Antworten:


61

Jede vorherige Antwort funktioniert (wie Google auch vorschlägt), aber sie sind schmutzig und unelegant .

Die richtige Methode zum Ändern des Abhörports für einen Dienst, der von Launched Handed unter Mac OS X ausgeführt wird, besteht darin, die Änderungen an den dedizierten Schlüsseln in verfügbar zu machen ssh.plist

Die Lösung ist also so einfach wie die Verwendung der Portnummer anstelle des Dienstnamens.

Ein Auszug aus meinem Schnitt /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>

Hinweis: Um diese Datei in El Capitan, Sierra und möglicherweise auch in zukünftigen Versionen bearbeiten zu können, müssen Sie SIP (System Integrity Protection) deaktivieren. Siehe Wie deaktiviere ich den Systemintegritätsschutz (SIP)? [...] .

Die obige Bearbeitung erzwingt auch, dass sshd nur über IPV4 lauscht.

Nachdem Sie Änderungen vorgenommen haben, ssh.plistmuss die Datei wie folgt neu geladen werden:

sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist

Beachten Sie, dass mit launchctl stop ...und launchctl start ...diese Datei NICHT neu geladen wird.

Die Manpage mit weiteren Informationen finden Sie, man launchd.plistindem Sie diesen Link eingeben oder verwenden .


3
@Yar launchd.plist ist der Name des Handbuchs. Die Änderung ist in der ssh.plist Datei in / System / Library / LaunchDaemons
Martijn Pieters

1
Ich stelle fest, dass Sie entweder den Computer neu starten oder den ssh-Dienst mit launchctl neu starten müssen.
Danny Staple

5
Grr ... bei jedem Upgrade von OS X (in diesem Fall Yosemite) wird diese Änderung verworfen, sodass ich mich daran erinnern muss, was ich das letzte Mal getan habe, um sie zu beheben, und wo ich diese Informationen gefunden habe. Danke für die Lösung!
Michael

2
@ Hassan Sie müssen zwei SSH-Instanzen starten .. dh einen weiteren Listener mit unterschiedlichen Namen und Werten für
SockServiceName

5
Beachten Sie, dass auf dem El Capitan - Version (und wahrscheinlich auch in zukünftigen Versionen auch) benötigen Sie SIP (System Integritätsschutz) zu deaktivieren , bevor Sie die Datei bearbeiten können, finden Sie unter : apple.stackexchange.com/a/208481
jcfrei

17

Wenn sshd einen zusätzlichen Port überwachen soll, können Sie dem Sockets-Wörterbuch mehrere Einträge hinzufügen.

Beispiel:

<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
Aus Gründen der Klarheit bezieht sich @Raim auf:/System/Library/LaunchDaemons/ssh.plist
Mike Causer

Was ist der Zweck des Bonjour-Schlüssels?

Ich würde auch gerne wissen, wozu der Bonjour-Schlüssel dient.
Drew

Was zur Hölle ist 20022?
Jamie Hutber

1
Zweck des Bonjour-Schlüssels: Mit diesem optionalen Schlüssel kann die Registrierung des Dienstes beim Bonjour-Subsystem angefordert werden. Wie gesagt von man launchd.plist.
Scott Willeke

6

Nach dem, was ich bisher gelesen (und erlebt) habe, gibt es drei Hauptmethoden, die angewendet werden können:

  1. Ändern Sie die Einstellung in der Datei ssh.plist.
  2. Ändern Sie die Einstellung in der Datei / etc / services.
  3. Ändern Sie die Einstellung in der Datei /etc/sshd.conf.

Eine andere Möglichkeit, die ich persönlich allen diesen Methoden bei weitem vorziehe, da sie das Herumspielen mit Mac OS X-Systemdateien vermeidet, ist die Verwendung von socat, um Port 22 auf den von Ihnen gewünschten Port umzuleiten.

  1. Laden Sie socat herunter: http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
  2. Verschiebe die tar.gz Datei in dein / usr / local / Verzeichnis ( sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz)
  3. Wechseln Sie in Ihr Verzeichnis / usr / local / bin ( cd /usr/local/bin)
  4. Dekomprimieren: sudo tar -xvzf socat-1.7.3.2.tar.gz
  5. Wechseln Sie in das unkomprimierte Dateiverzeichnis: cd ./socat-1.7.3.2
  6. Führen Sie das übliche configure, make und make install aus, um socat ( sudo ./configure && sudo make && sudo make install) zu installieren.
  7. Leiten Sie Port 22 (Standard-ssh) mit der richtigen Option an einen beliebigen Port um (im folgenden Beispiel 2222), indem Sie einen socat-Aufruf senden ( sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22).

Sie sind fertig und Ihre Mac OS X-Systemdateien bleiben unverändert. Darüber hinaus funktioniert diese Methode nicht nur auf Snow Leopard, sondern auf allen Versionen von Mac OS X und auf allen Computern, auf denen socat ausgeführt werden kann.

Das Letzte, was Sie tun müssen, wenn Sie einen Router / eine Firewall verwenden, ist, die richtigen Umleitungsbefehle in Ihren Router / Ihre Firewall aufzunehmen.

Außerdem wird vermieden, dass die Frage, ob die ssh.plist-Methode, die services-Methode oder welche Methode auch immer besser, eleganter oder schlechter ist als die andere, in die Debatte gerät.

Sie können auch problemlos ein Skript vorbereiten, das beim Start ausgeführt wird, um die Socat-Umleitung bei jedem Neustart des Computers neu zu erstellen. Legen Sie dies in /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>

Verwenden Sie sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plistes zu laden. Es wird bei zukünftigen Neustarts automatisch geladen.

Darüber hinaus können Sie die Sicherheit verbessern, indem Sie (i) Ihre Firewall so einstellen, dass Verbindungen zu Ihrem Port 22 von einer anderen Schnittstelle als dem Loopback (127.0.0.1) blockiert werden, und (ii) eine ähnliche Änderung in Ihrer Datei sshd.conf vornehmen Ich lasse ssh nur auf dem Loopback hören.

Genießen.


2
Das Bearbeiten der /etc/servicesDatei ist eine schlechte Idee - es wirkt sich auf Dinge wie die SSH-Schlüsselanmeldung bei Ihrem Github- oder Bitbucket-Konto aus, die versuchen, eine Verbindung zum neuen Port herzustellen, und fehlschlagen.
ccpizza

1
Sie sollten ein Arbeitsverzeichnis erstellen. Dann sudomit installieren. Sie sollten nicht mit erhöhten Rechten erstellen.

Dies funktioniert auch auf El Capitan, wo SIP das Ändern von /System/Library/LaunchDaemons/ssh.plist erschwert. Auf El Capitan ist der Schlüssel "NetworkState" jedoch veraltet. Ich schlage vor <key>KeepAlive</key><true/>.
RTS - lesen Sie über Monica Cellio

mit der neuesten osx sierra ist die arbeitsversion
Shanmu

1

Ich konnte das nirgends in einer Manpage richtig dokumentieren, aber wenn Sie nichts weiter tun möchten, als einen zusätzlichen Listener hinzuzufügen, können Sie eine Reihe von Listenern verwenden und ein zusätzliches Diktat haben. Dies erfordert keine Bearbeitung von / etc / services, wenn Sie den Port direkt verwenden (aber denken Sie daran, den Port auf Ihrer Firewall zu öffnen!)

    <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
Was ist der Zweck des Bonjour-Schlüssels?

@jww Ich denke, das ist ein Fehler beim Kopieren und Einfügen, als ich dies von anderen Hörern zusammengesetzt habe.
Adam Prescott

Ich würde auch gerne wissen, wozu der Bonjour-Schlüssel dient.
Drew

1
Zweck des Bonjour-Schlüssels: Mit diesem optionalen Schlüssel kann die Registrierung des Dienstes beim Bonjour-Subsystem angefordert werden. Wie gesagt von man launchd.plist.
Scott Willeke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.