Activer et configurer le serveur SSH sur macOS Tahoe
Introduction
Vous souhaitez accéder à votre Mac à distance depuis un PC Windows ou une autre machine ?
Le protocole SSH (Secure Shell) est la solution idéale.
Sur macOS, c'est OpenSSH qui est utilisé, le même que sur Linux et BSD. Cependant, le serveur SSH est désactivé par défaut sur macOS pour des raisons de sécurité.
Dans cet article, nous allons voir comment activer SSH sur macOS Tahoe, puis explorer en détail les différentes options de configuration et de sécurisation disponibles.
Activer la session à distance
Sur macOS, l'activation de SSH passe par la fonctionnalité Session à distance.
Voici les étapes à suivre :
- Ouvrez Réglages Système
- Allez dans Général → Partage
- Activez Session à distance
- Par défaut, l'accès est limité aux administrateurs. Cliquez sur le "i" à côté de l'option pour ajouter d'autres utilisateurs si nécessaire.
Une fois activé, vous pouvez vous connecter depuis un autre ordinateur avec la commande :
ssh votre_nom_utilisateur@adresse_ip_du_mac
Fichiers de configuration
Comme sur Linux et BSD, OpenSSH sur macOS utilise des fichiers de configuration standards :
- /etc/ssh/sshd_config : Configuration du serveur SSH
- ~/.ssh/config : Configuration du client SSH (par utilisateur)
- /etc/ssh/ssh_config : Configuration du client SSH (globale)
- ~/.ssh/authorized_keys : Clés publiques autorisées pour la connexion
Gestion du service avec launchd
Contrairement à Linux (systemd) ou Solaris/illumos (SMF), macOS utilise launchd pour gérer les services.
Voici les commandes utiles :
Vérifier le statut du service
sudo launchctl list | grep ssh
Activer ou désactiver SSH en ligne de commande
A condition d'avoir au préalable activé l'accès complet au disque (Full Disk Access) pour l'application Terminal.
- Ouvrez Réglages Système
- Allez dans Confidentialité et sécurité → Accès complet au disque
- Activer l'accès complet pour l'application Terminal (qui devra être redémarrée)
# Activer SSH
sudo systemsetup -setremotelogin on
# Désactiver SSH
sudo systemsetup -setremotelogin off
Redémarrer le service après modification
# Vérifier la syntaxe de la configuration
sudo sshd -t
# Redémarrer le service
sudo launchctl stop com.openssh.sshd
sudo launchctl start com.openssh.sshd
Sécurisation du serveur SSH
Les options de sécurité se configurent dans le fichier /etc/ssh/sshd_config.
Éditez-le avec :
sudo nano /etc/ssh/sshd_config
Changement de port
Par défaut, SSH écoute sur le port 22. Changer ce port réduit le bruit des scans automatisés (sécurité par obscurité).
Attention : Sur macOS, le service SSH par défaut utilise l'activation par socket via launchd. Le fichier /System/Library/LaunchDaemons/ssh.plist contient la directive SockServiceName qui force l'écoute sur le port 22, ignorant la directive Port de sshd_config.
Pour changer le port SSH, il faut donc créer un service launchd personnalisé.
Étape 1 — Modifier le port dans sshd_config
Éditez /etc/ssh/sshd_config et modifiez la ligne :
Port 2222
Étape 2 — Désactiver le service SSH par défaut
sudo systemsetup -setremotelogin off
Étape 3 — Créer un service launchd personnalisé
Créez le fichier /Library/LaunchDaemons/com.openssh.sshd-custom.plist en copiant directement tout le bloc ci-dessous:
sudo tee /Library/LaunchDaemons/com.openssh.sshd-custom.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.openssh.sshd-custom</string>
<key>Program</key>
<string>/usr/sbin/sshd</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/sshd</string>
<string>-D</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
EOF
Ce plist lance sshd directement avec l'option -D (mode daemon au premier plan), ce qui lui permet de lire le port configuré dans sshd_config.
Étape 4 — Définir les permissions et charger le service
# Définir les permissions
sudo chmod 644 /Library/LaunchDaemons/com.openssh.sshd-custom.plist
# Charger et démarrer le service
sudo launchctl load -w /Library/LaunchDaemons/com.openssh.sshd-custom.plist
Étape 5 — Vérifier que sshd écoute sur le nouveau port
sudo lsof -i :2222
Vous devez voir une ligne avec sshd et LISTEN.
Gestion du service personnalisé
# Arrêter le service
sudo launchctl stop com.openssh.sshd-custom
# Démarrer le service
sudo launchctl start com.openssh.sshd-custom
# Désactiver le service (ne se lancera plus au démarrage)
sudo launchctl unload -w /Library/LaunchDaemons/com.openssh.sshd-custom.plist
# Réactiver le service
sudo launchctl load -w /Library/LaunchDaemons/com.openssh.sshd-custom.plist
Après modification, connectez-vous avec : ssh -p 2222 user@ip
Authentification par clés
L'authentification par clés est plus sécurisée que les mots de passe. Elle repose sur une paire clé privée/clé publique.
Côté client — générer une clé
ssh-keygen -t ed25519 -C "mon-pc-windows"
Envoyer la clé publique au Mac
Depuis Windows, ssh-copy-id n'existant pas, nous devons utiliser une autre commande
Vous devrez adapter la commande suivante.
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user-mac@ip-mac "mkdir -p ~/.ssh && tr -d '\r' >> ~/.ssh/authorized_keys"
Ou manuellement, ajoutez le contenu de id_ed25519.pub dans le fichier ~/.ssh/authorized_keys sur le Mac.
Configuration serveur
Par défaut, OpenSSH accepte les connexions par clé sans aucune configuration supplémentaire dans le fichier /etc/ssh/sshd_config, même lorsque la directive "PubkeyAuthentication" est commentée.
Néanmoins, si vous souhaitez forcer ce comportement :
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Particularité macOS — Trousseau
Sur macOS, vous pouvez stocker la passphrase de votre clé dans le Trousseau.
Dans ~/.ssh/config :
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_ed25519
Désactiver l'authentification par mot de passe
Une fois les clés en place, désactivez les mots de passe pour bloquer les attaques par force brute.
PasswordAuthentication no
KbdInteractiveAuthentication no
Attention : assurez-vous que votre clé fonctionne avant d'activer cette option, sinon vous perdrez l'accès distant !
Désactiver la connexion root
Empêcher la connexion directe en root est une bonne pratique universelle.
PermitRootLogin no
Variantes possibles :
- prohibit-password : autorise root uniquement par clé
- forced-commands-only : autorise root uniquement pour des commandes spécifiques
Restreindre les utilisateurs (AllowUsers / DenyUsers)
Vous pouvez contrôler précisément qui peut se connecter en SSH.
# Autoriser uniquement ces utilisateurs
AllowUsers alice bob
# Interdire certains utilisateurs
DenyUsers invité test
# Restriction par groupe
AllowGroups ssh-users admin
DenyGroups guests
Ordre d'évaluation : DenyUsers → AllowUsers → DenyGroups → AllowGroups
Limiter les tentatives de connexion
Protection contre les attaques par force brute.
# Nombre d'échecs avant déconnexion
MaxAuthTries 3
# Secondes pour s'authentifier
LoginGraceTime 30
# Sessions simultanées par connexion
MaxSessions 2
# Limite les connexions non authentifiées
MaxStartups 3:50:10
Désactiver les fonctionnalités inutiles
Réduire la surface d'attaque en désactivant ce dont vous n'avez pas besoin.
# Désactive le forwarding graphique X11
X11Forwarding no
# Désactive les tunnels TCP
AllowTcpForwarding no
# Désactive le forwarding de l'agent SSH
AllowAgentForwarding no
# Désactive les tunnels VPN
PermitTunnel no
# Désactive le message du jour
PrintMotd no
Algorithmes cryptographiques
Restreindre aux algorithmes modernes et sûrs.
# Échange de clés
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org
# Clés hôtes
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
# Chiffrement
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
# MAC (intégrité)
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
Bannière de connexion
Afficher un avertissement légal avant l'authentification.
Banner /etc/ssh/banner.txt
Contenu typique de /etc/ssh/banner.txt :
******************************************
* Accès réservé aux utilisateurs *
* autorisés. Toute activité est *
* susceptible d'être enregistrée. *
******************************************
Configuration SFTP
SFTP (SSH File Transfer Protocol) utilise le même service SSH. La configuration de base est généralement déjà présente.
Configuration par défaut
Subsystem sftp /usr/libexec/sftp-server
SFTP chrooté (sécurisé)
Pour enfermer les utilisateurs SFTP dans leur répertoire personnel :
Subsystem sftp internal-sftp
Match Group sftp-users
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Prérequis : le répertoire racine du chroot doit appartenir à root avec les permissions 755.
Configuration du pare-feu
Si vous changez le port SSH par défaut, vous devrez peut-être configurer le pare-feu macOS pour autoriser les connexions.
Pare-feu applicatif
C'est le pare-feu activé via Réglages Système → Réseau → Pare-feu. Il fonctionne par application, pas par port. Quand vous activez "Connexion à distance", il autorise automatiquement le processus sshd, quel que soit le port.
Vérifier que sshd est autorisé
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --listapps
Autoriser explicitement sshd
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/sbin/sshd
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/sbin/sshd
Pare-feu PF (Packet Filter)
macOS intègre aussi PF, le pare-feu BSD bas niveau. Il est désactivé par défaut, mais certains logiciels de sécurité (Little Snitch, Lulu, etc.) peuvent l'activer.
Vérifier si PF est actif
sudo pfctl -s info | grep Status
Ajouter une règle pour le port personnalisé
Si PF est actif, éditez /etc/pf.conf et ajoutez :
pass in proto tcp from any to any port 2222
Puis rechargez les règles :
sudo pfctl -f /etc/pf.conf
Diagnostic et dépannage
Si la connexion SSH ne fonctionne pas, voici comment identifier le problème.
Vérifier que sshd écoute sur le bon port
sudo lsof -i :2222
Vous devez voir une ligne avec sshd et LISTEN.
Tester la connexion localement
ssh -p 2222 localhost
Si ça fonctionne localement mais pas depuis l'extérieur, c'est le pare-feu ou le réseau.
Tester la connectivité depuis Windows
Test-NetConnection -ComputerName IP_DU_MAC -Port 2222
Lancer sshd en mode debug
Pour diagnostiquer les problèmes de démarrage du service :
sudo /usr/sbin/sshd -d
Cette commande lance sshd au premier plan avec des messages de debug. Si le démarrage échoue, vous verrez l'erreur exacte.
↑ Haut de page