Comment changer le port sshd sur Mac OS X?

53

Je veux changer le port sshdutilisé sur un serveur Mac. Par exemple, disons du port 22 au port 32.

Le montage /etc/sshd_configne semble pas fonctionner. Est-ce que quelqu'un sait comment le changer? Je préférerais une méthode compatible avec toutes les versions d'OSX (ou autant que possible, au moins).

Alexander Artemenko
la source
Notez également que /usr/libexec/sshd-keygen-wrapper(indiqué dans les plistes ci-dessous) peut démarrer un SSH différent de celui spécifié dans la pliste elle-même. Si vous le chat, ça commence toujours /usr/sbin/sshd.

Réponses:

61

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

La bonne façon de changer le port d'écoute d'un service launchd géré sous Mac OS X consiste à apporter les modifications aux 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 édition /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>

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

La modification ci-dessus forcera également sshd à n'écouter que sur IPV4.

Après toute modification 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 contenant plus d'informations peut être trouvée en tapant man launchd.plistou en utilisant ce lien .

drAlberT
la source
3
@Yar launchd.plist est le nom du manuel. La modification est dans le fichier ssh.plist dans / Système / Bibliothèque / LaunchDaemons
Martijn Pieters le
1
Je remarque que vous devez soit redémarrer la machine, soit redémarrer le service ssh avec launchctl.
Danny Staple
5
Grr ... chaque mise à niveau d'OS X (Yosemite dans ce cas) rejette cette modification, m'obligeant à me rappeler ce que j'ai fait la dernière fois pour la réparer et l'emplacement où j'ai trouvé ces informations. Merci pour le correctif!
Michael
2
@ Hassan, vous devez démarrer deux instances ssh .. c.-à-d. Ajouter un autre écouteur avec un nom et une valeur différents pour SockServiceName
drAlberT
5
Notez que sur la version d'El Capitan (et probablement aussi dans les versions futures), vous devez désactiver SIP (System Integrity Protection) avant de pouvoir modifier le fichier, voir: apple.stackexchange.com/a/208481
jcfrei
17

Si vous voulez 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>
raimue
la source
1
Pour plus de clarté, @Raim fait référence à:/System/Library/LaunchDaemons/ssh.plist
Mike Causer
Quel est le but de la clé Bonjour?
J'aimerais aussi savoir à quoi sert la clé Bonjour?
Drew
C'est quoi l'enfer 20022?
Jamie Hutber
1
Objectif de la clé Bonjour: Cette clé facultative peut être utilisée pour demander que le service soit enregistré auprès du sous-système Bonjour. Comme dit par man launchd.plist.
Scott Willeke
6

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

  1. changez le réglage dans le fichier ssh.plist;
  2. modifiez les paramètres 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 de loin à toutes et chacune de ces méthodes, pour éviter les problèmes de fichiers système 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 dans 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. Allez dans 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 de fichier non compressé: cd ./socat-1.7.3.2
  6. Exécutez les commandes habituelles configure, make et make install pour installer socat ( sudo ./configure && sudo make && sudo make install)
  7. Redirige le port 22 (ssh par défaut) vers le port de votre choix (dans l'exemple suivant, 2222) en utilisant l'option appropriée 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 ne sont pas modifiés. De plus, cette méthode ne fonctionne pas uniquement sur Snow Leopard, mais sur toutes les versions de Mac OS X et sur toutes les machines sur lesquelles 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 appropriées dans votre routeur / pare-feu.

De plus, cela évite de se perdre dans le débat, que la méthode ssh.plist, la méthode des services ou la méthode de votre choix soit meilleure, plus élégante ou pire que l’autre.

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

Utilisez sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plistpour le charger. Il se chargera automatiquement lors des prochains redémarrages.

En outre, vous pouvez également améliorer la sécurité en (i) configurant votre pare-feu de manière à bloquer toute connexion à votre port 22 à partir de toute interface autre que la boucle (127.0.0.1) et (ii) à modifier de manière similaire le fichier sshd.conf. ssh n'écoute que sur le bouclage.

Prendre plaisir.

Cedric
la source
2
La modification du /etc/servicesfichier est une mauvaise idée. Cela affectera des choses telles que la connexion de la clé SSH à vos comptes github ou bitbucket, qui chercheront à se connecter au nouveau port et échoueront.
ccpizza
1
Vous devriez construire dans un répertoire de travail. Ensuite, utilisez sudopour installer. Vous ne devriez pas construire avec des privilèges élevés.
Ceci fonctionne également sur El Capitan où SIP rend difficile la modification de /System/Library/LaunchDaemons/ssh.plist. Mais sur El Capitan, la clé "NetworkState" est obsolète. Je suggère <key>KeepAlive</key><true/>.
RTS - découvrez Monica Cellio
avec la dernière version d'osx sierra, la version de travail est la suivante: gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd
Shanmu 13/03/2017
1

Je ne pouvais pas voir cela correctement documenté nulle part dans une page de manuel, mais si vous ne voulez rien faire de plus que d'ajouter un auditeur supplémentaire, vous pouvez utiliser un éventail d'écouteurs et créer un dictée supplémentaire. Cela ne nécessite pas de modification de / 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>
Adam Prescott
la source
1
Quel est le but de la clé Bonjour?
@jww Je pense que c'est une erreur de copier-coller de la part des autres auditeurs.
Adam Prescott
J'aimerais aussi savoir à quoi sert la clé Bonjour?
Drew
1
Objectif de la clé Bonjour: Cette clé facultative peut être utilisée pour demander que le service soit enregistré auprès du sous-système Bonjour. Comme dit par man launchd.plist.
Scott Willeke