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).
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 .
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>
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:
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.
Sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz
)cd /usr/local/bin
)Sudo tar -xvzf socat-1.7.3.2.tar.gz
cd ./socat-1.7.3.2
Sudo ./configure && Sudo make && Sudo make install
)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.
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>