web-dev-qa-db-fra.com

Comment changer le port ssh sur Mac OS X?

Je souhaite changer le port sshd utilisé sur un serveur Mac. Par exemple, disons du port 22 au port 32.

Modification /etc/sshd_config ne semble pas fonctionner. Quelqu'un sait-il comment le changer? Je préférerais une méthode compatible avec toutes les versions OSX (ou autant que possible, au moins).

54

Toutes les réponses précédentes fonctionnent (comme le suggère également Google), mais elles sont sales et inélégantes.

La bonne façon de changer le port d'écoute d'un service géré par launchd sur Mac OS X est de faire les changements les clés dédiées disponibles dans ssh.plist

La solution est donc aussi simple que d'utiliser le numéro de port au lieu du nom du service.

Un extrait de mon /System/Library/LaunchDaemons/ssh.plist Édité:

    <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>

Remarque: pour pouvoir éditer ce fichier sur El Capitan, Sierra et probablement les versions futures également, vous devez désactiver SIP (Protection de l'intégrité du système). Voir Comment désactiver la protection de l'intégrité du système (SIP) [...] .

L'édition ci-dessus forcera également sshd à écouter uniquement sur IPV4.

Après avoir apporté des modifications à ssh.plist, Le fichier doit être rechargé comme suit:

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

Notez que l'utilisation de launchctl stop ... Et launchctl start ... NE rechargera PAS ce fichier.

La page de manuel avec plus d'informations peut être trouvée en tapant man launchd.plist Ou en utilisant ce lien .

62
drAlberT

Si vous souhaitez que sshd écoute sur un port supplémentaire, vous pouvez ajouter plusieurs entrées au dictionnaire Sockets.

Exemple:

<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
raimue

D'après ce que j'ai lu (et expérimenté) jusqu'à présent, il existe trois méthodes principales qui peuvent être utilisées:

  1. modifiez le paramètre dans le fichier ssh.plist;
  2. modifiez le paramètre dans le fichier/etc/services;
  3. modifiez le paramètre dans le fichier /etc/sshd.conf.

Une autre façon de le faire, que je préfère personnellement de loin à toutes et à chacune de ces méthodes, car cela évite de jouer avec les fichiers système de Mac OS X consiste à utiliser socat pour rediriger le port 22 vers le port de votre choix.

  1. Téléchargez socat: http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
  2. Déplacez le fichier tar.gz vers votre répertoire/usr/local/(Sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz)
  3. Accédez à votre répertoire/usr/local/bin (cd /usr/local/bin)
  4. Décompresser: Sudo tar -xvzf socat-1.7.3.2.tar.gz
  5. Déplacer vers le répertoire des fichiers non compressés: cd ./socat-1.7.3.2
  6. Exécutez le configure, make et make install habituel pour installer socat (Sudo ./configure && Sudo make && Sudo make install)
  7. Redirigez le port 22 (ssh par défaut) vers le port de votre choix (dans l'exemple suivant, 2222) en utilisant l'option correcte en envoyant un appel socat (Sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22)

Vous avez terminé et vos fichiers système mac os x restent inchangés. De plus, cette méthode fonctionne non seulement sur Snow Leopard, mais sur toutes les versions de Mac OS X et également sur toute machine sur laquelle socat peut s'exécuter.

La dernière chose que vous devez faire si vous utilisez un routeur/pare-feu est d'inclure les commandes de redirection correctes dans votre routeur/pare-feu.

En outre, cela évite de rester coincé dans le débat, que la méthode ssh.plist, la méthode services ou la méthode quelle qu'elle soit soit meilleure, plus élégante ou pire que l'autre.

Vous pouvez également facilement préparer un script qui s'exécute au démarrage pour reconstruire la redirection socat à chaque redémarrage de votre machine. Placez-le dans /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>

Utilisation Sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plist pour le charger. Il se chargera automatiquement lors des prochains redémarrages.

De plus, vous pouvez également améliorer la sécurité en (i) configurant votre pare-feu pour bloquer toutes les connexions à votre port 22 à partir de toute autre interface que le bouclage (127.0.0.1) et (ii) apportant une modification similaire dans votre fichier sshd.conf sur avoir ssh écouter sur le bouclage uniquement.

Prendre plaisir.

6
Cedric

Je ne pouvais pas voir cela documenté correctement dans une page de manuel, mais si vous ne voulez rien faire de plus que d'ajouter un écouteur supplémentaire, vous pouvez utiliser un tableau d'écouteurs et avoir un dict supplémentaire. Cela ne nécessite pas de modifier/etc/services si vous utilisez directement le port (mais n'oubliez pas d'ouvrir le port sur votre pare-feu!)

    <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
Adam Prescott