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


Ich möchte den Port ändern sshd verwendet auf einem Mac-Server. Nehmen wir zum Beispiel von Port 22 zu Port 32.

Bearbeitung /etc/sshd_config scheint nicht zu funktionieren. Kann jemand es ändern? Ich würde eine Methode bevorzugen, die mit allen OSX-Versionen kompatibel ist (oder zumindest so viele wie möglich).


52
2018-06-03 14:19


Ursprung


Beachten Sie auch das /usr/libexec/sshd-keygen-wrapper (In den folgenden Abbildungen gezeigt) kann ein anderer SSH als im Plist selbst angegeben gestartet werden. Wenn Sie es fangen, beginnt es immer /usr/sbin/sshd. - jww


Antworten:


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

Die richtige Methode zum Ändern des Überwachungsports für einen auf Launchd abgewickelten Dienst unter Mac OS X besteht darin, die Änderungen an den dedizierten Schlüsseln vorzunehmen ssh.plist

Die Lösung besteht also darin, die Portnummer anstelle des Servicenamens zu verwenden.

Ein Auszug von mir bearbeitet /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 auf El Capitan, Sierra und wahrscheinlich auch zukünftigen Versionen bearbeiten zu können, müssen Sie SIP (System Integrity Protection) deaktivieren. Sehen Wie deaktiviere ich den Systemintegritätsschutz (SIP) [...].

Die obige Änderung wird sshd auch zwingen, nur über IPV4 zu hören.

Nach Änderungen an ssh.plist, muss 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 ... lädt diese Datei NICHT neu.

Die man-Seite mit mehr Informationen kann durch Tippen gefunden werden man launchd.plist oder verwenden dieser Link.


61
2017-09-22 09:52



@Yar launchd.plist ist der Name des Handbuchs. Die Änderung befindet sich in der Datei ssh.plist unter / System / Library / LaunchDaemons - Martijn Pieters
Ich bemerke, dass Sie entweder den Rechner neu starten müssen oder den ssh-Dienst mit launchctl neu starten müssen. - Danny Staple
Grr ... jedes Upgrade von OS X (Yosemite in diesem Fall) verwirft diese Änderung und erfordert, dass ich mich daran erinnere, was ich das letzte Mal gemacht habe, um es zu reparieren und wo ich diese Information gefunden habe. Danke für die Lösung! - Michael
@Hassan müssen Sie zwei ssh-Instanzen starten. D. H., Fügen Sie einen anderen Listener mit anderem SockServiceName-Namen und -Wert hinzu - drAlberT
Beachten Sie, dass Sie in der El Capitan-Version (und wahrscheinlich auch in zukünftigen Versionen) SIP (System Integrity Protection) deaktivieren müssen, bevor Sie die Datei bearbeiten können, siehe: apple.stackexchange.com/a/208481 - jcfrei


Wenn Sie möchten, dass sshd einen zusätzlichen Port abhört, 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>

17
2017-09-28 16:41



Zur Klarheit bezieht sich @Raim auf: /System/Library/LaunchDaemons/ssh.plist - Mike Causer
Was ist der Zweck des Bonjour-Schlüssels? - jww
Ich würde auch gerne wissen, was der Zweck des Bonjour-Schlüssels ist? - Drew
Was zur Hölle ist 20022? - Jamie Hutber


Von dem, was ich bisher gelesen (und erfahren) habe, gibt es drei Hauptmethoden, die verwendet 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 bei allen und jeder dieser Methoden bevorzuge, ist die Verwendung von socat, um Port 22 an den gewünschten Port umzuleiten.

  1. Herunterladen Socat: http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
  2. Verschieben Sie die Datei tar.gz in Ihr Verzeichnis / usr / local / (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. In das unkomprimierte Dateiverzeichnis verschieben: cd ./socat-1.7.3.2
  6. Führen Sie die übliche Konfiguration, make und make install zur Installation von socat (sudo ./configure && sudo make && sudo make install)
  7. Umleiten Sie Port 22 (Standard ssh) an einen beliebigen Port (z. B. 2222) mit der richtigen Option, indem Sie einen Socat-Anruf senden (sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22)

Sie sind fertig und Ihre Mac OS X-Systemdateien bleiben unverändert. Außerdem funktioniert diese Methode nicht nur auf Snow Leopard, sondern auf allen Versionen von Mac OS X und auch auf jedem Computer, auf dem socat ausgeführt werden kann.

Das letzte, was Sie tun müssen, wenn Sie einen Router / eine Firewall verwenden, besteht darin, die richtigen Umleitungsbefehle in Ihren Router / Firewall aufzunehmen.

Außerdem vermeidet es, in der Debatte stecken zu bleiben, ob die Methode ssh.plist, die Methode services oder welche Methode auch immer besser, eleganter oder schlechter ist als die andere.

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. Platziere das 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>

Benutzen sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plist um es zu laden. Es wird automatisch bei zukünftigen Neustarts geladen.

Außerdem können Sie die Sicherheit verbessern, indem Sie (i) Ihre Firewall so einstellen, dass alle Verbindungen zu Ihrem Port 22 von einer anderen Schnittstelle als der Loopback (127.0.0.1) blockiert werden, und (ii) eine ähnliche Änderung in Ihrer sshd.conf-Datei vornehmen Lass ssh nur auf den Loopback hören.

Genießen.


6
2017-12-22 10:46



Bearbeiten der /etc/services Datei ist eine schlechte Idee - es wird Dinge wie SSH-Schlüssel Login auf Ihre Github oder Bitbucket-Konten, die versuchen, eine Verbindung zu dem neuen Port und scheitern. - ccpizza
Sie sollten in einem Scratch-Verzeichnis erstellen. Dann benutze sudo installieren. Sie sollten nicht mit erhöhten Rechten bauen. - jww
Dies funktioniert auch bei El Capitan, wo SIP das Ändern von /System/Library/LaunchDaemons/ssh.plist erschwert. Aber auf El Capitan ist der "NetworkState" Schlüssel veraltet; Ich schlage vor <key>KeepAlive</key><true/>. - Robert Tupelo-Schneck
mit der neuesten osx sierra ist die funktionierende Version: gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd - Shanmu


Ich konnte das nirgends richtig in einer Manpage dokumentiert sehen, aber wenn Sie nur einen zusätzlichen Listener hinzufügen möchten, können Sie ein Array 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 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
@jww Ich denke, das ist ein Copy-Paste-Fehler von dem, als ich das von anderen Zuhörern zusammengefügt habe. - Adam Prescott
Ich würde auch gerne wissen, was der Zweck des Bonjour-Schlüssels ist? - Drew