| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| linux:ssh [2021/01/24 19:01] – [SSH] add link phsw | linux:ssh [2024/09/03 09:29] (Version actuelle) – [Créer un tunnel de port-forwarding] add link phsw |
|---|
| * ''-o'': préciser des options (un ''-o'' par option) | * ''-o'': préciser des options (un ''-o'' par option) |
| * ''-L'': forward un port local vers un port sur une machine distant: ''ssh -L <adresselocale>:<portlocal>:<adressedistante>:<portdistant>'' | * ''-L'': forward un port local vers un port sur une machine distant: ''ssh -L <adresselocale>:<portlocal>:<adressedistante>:<portdistant>'' |
| * ''-D'': forward dynamique de port: ''ssh -D 8080 toor@ip'' | * ''-F'': indique quel fichier ''ssh/config'' utiliser. ''-F /dev/null'' correspond à n'utiliser aucun fichier de configuration. |
| |
| |
| Si l'adresse locale est ''127.0.0.1'', seule la machine locale pour l'utiliser, si on met ''0.0.0.0'', tous les ordinateurs pourront se connecter à ce port. | Si l'adresse locale est ''127.0.0.1'', seule la machine locale pour l'utiliser, si on met ''0.0.0.0'', tous les ordinateurs pourront se connecter à ce port. |
| | |
| | |
| | Le dossier ''.ssh'' doit avoir les permissions 700. |
| |
| |
| * [[https://lord.re/posts/187-ssh-key-restricted-rsync-backup/]] | * [[https://lord.re/posts/187-ssh-key-restricted-rsync-backup/]] |
| * [[https://blog.g3rt.nl/upgrade-your-ssh-keys.html]] | * [[https://blog.g3rt.nl/upgrade-your-ssh-keys.html]] |
| | * [[https://github.com/opsdisk/the_cyber_plumbers_handbook|The Cyber Plumber's Handbook - The definitive guide to Secure Shell (SSH) tunneling, port redirection, and bending traffic like a boss]] |
| | * [[https://grahamhelton.com/blog/ssh-cheatsheet/|An Excruciatingly Detailed Guide To SSH (But Only The Things I Actually Find Useful)]] |
| | * [[https://blog.stephane-robert.info/docs/securiser/durcissement/ssh/|Durcir la configuration SSH]] |
| | |
| | |
| | <code bash> |
| | ssh-keygen -t ed25519 -a 100 -C "Comment" |
| | </code> |
| | |
| |
| |
| ------ | |
| ==== Options ==== | ==== Options ==== |
| |
| * [[https://www.blog-libre.org/2019/05/11/loption-controlmaster-de-ssh_config/]] | * [[https://www.bloglibre.net/2019/05/11/loption-controlmaster-de-ssh_config/]] |
| |
| * ''UserKnownHostsFile=/dev/null'': le fichier //known_hosts// est ///dev/null//, utile pour ne pas sauvgegarder la clé publique du serveur SSH | * ''UserKnownHostsFile=/dev/null'': le fichier //known_hosts// est ///dev/null//, utile pour ne pas sauvegarder la clé publique du serveur SSH |
| * ''StrictHostKeyChecking=no '': ne pas demander la confirmation d'ajout de la nouvelle clé (ajouter un espace après le ''no'' !) | * ''StrictHostKeyChecking=no '': ne pas demander la confirmation d'ajout de la nouvelle clé (ajouter un espace après le ''no'' !) |
| * ''PreferredAuthentications=password'': passer directement à la méthode d'authentification par mot de passe, sans essayer les clés privée du dossier ''.ssh'' | * ''PreferredAuthentications=password'': passer directement à la méthode d'authentification par mot de passe, sans essayer les clés privée du dossier ''.ssh'' |
| |
| |
| ------ | |
| ==== Créer un tunnel de port-forwarding ==== | ==== Créer un tunnel de port-forwarding ==== |
| | |
| | * [[https://goteleport.com/blog/ssh-tunneling-explained/]] |
| | * [[https://iximiuz.com/en/posts/ssh-tunnels/|A Visual Guide to SSH Tunnels (with labs)]] |
| | * [[https://blog.stephane-robert.info/docs/services/reseau/ssh-tunneling/|Maitrisez le tunneling SSH]] |
| | |
| | |
| |
| A -- B -- C | A -- B -- C |
| |
| [[https://dev.to/samuyi/the-how-to-of-ssh-port-forwarding-1f4e|Source]] | [[https://dev.to/samuyi/the-how-to-of-ssh-port-forwarding-1f4e|Source]] |
| | |
| | |
| | |
| | === Tunnel de port dynamique === |
| | |
| | Si seule la machine A peut accéder à la machine B et qu'on a une connexion à la machine A : |
| | <code bash> |
| | ssh -ND 8080 A |
| | </code> |
| | Cela crée un proxy socks qui écoute sur le port 8080 de la machine local. On peut ensuite configurer Firefox (''about:profiles'' pour le faire uniquement dans un profil spécifique) pour utiliser ce proxy (proxy SOCKSv5 sur 127.0.0.1:8080). |
| |
| |
| === Paramètres === | === Paramètres === |
| |
| * ''-N'': n'ouvre pas de shell distant pour saisir des commandes, reste bloqué, utile pour forwarder un port | * ''-N'': n'ouvre pas de shell distant pour saisir des commandes, reste bloqué, utile pour forwarder un port |
| |
| |
| |
| ------ | |
| ==== Transférer sa clé publique vers un serveur ==== | ==== Transférer sa clé publique vers un serveur ==== |
| |
| |
| |
| ------- | |
| ==== Agent SSH ==== | ==== Agent SSH ==== |
| |
| ssh-add -l # ne renvoie rien | ssh-add -l # ne renvoie rien |
| </code> | </code> |
| | |
| | * [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=472477]] |
| | |
| |
| |
| ------ | |
| ==== Empêcher OpenSSH de donner son OS ==== | ==== Empêcher OpenSSH de donner son OS ==== |
| |
| |
| |
| ------- | |
| ==== Monter un système de fichier SSHFS ==== | ==== Monter un système de fichier SSHFS ==== |
| |
| |
| |
| ------------------- | |
| ==== X Forwarding ==== | ==== X Forwarding ==== |
| |
| |
| |
| --------------------- | |
| ==== Fichier ssh/config ==== | ==== Fichier ssh/config ==== |
| |
| | La configuration est documentée dans la page de man de ''ssh_config''. |
| <file conf ~/.ssh/config> | <file conf ~/.ssh/config> |
| ForwardAgent yes # transmet les clés SSH du client, pour qu'elles soient disponibles dans la session SSH | ForwardAgent yes # transmet les clés SSH du client, pour qu'elles soient disponibles dans la session SSH |
| ForwardX11 yes | ForwardX11 yes |
| </file> | </file> |
| | |
| | Pour forcer l'utilisation de l'IPv4 : |
| | <code> |
| | AddressFamily inet |
| | </code> |
| | |
| | |
| | |
| | ==== Fichier authorized_keys ==== |
| | |
| | Sa syntaxe est documentée dans la page de man de ''sshd''. |
| | |
| | Chaque clé dans le fichier peut être précédée d'instructions pour limiter l'utilisation de la clé. Par exemple : |
| | * ''restrict,from="10.0.0.1",command="<une commande>" <clé>'' empêche l'utilisation de toutes les fonctionnalités de SSH, permet l'utilisation de la clé seulement depuis le client 10.0.0.1 et exécute la commande spécifiée une fois l'authentification réussie |
| | * ''restrict,port-forwarding<clé>'' empêche l'utilisation de toutes les fonctionnalités, ne permet que le port-forwarding (pour faire du ProxyJump, par exemple). |
| | |
| | |
| | ==== ProxyJump ==== |
| | |
| | Pour passer à travers (plusieurs) serveur(s) de rebond avant d'atteindre le serveur cible : |
| | <code conf> |
| | Host rpi-a |
| | ProxyJump rpi-b |
| | HostName 10.0.0.3 |
| | IdentityFile ~/.ssh/rpi_ed25519 |
| | Port 3233 |
| | </code> |
| | |
| | Passe par ''rpi-b'' pour se connecter à ''rpi-a''. Les autres paramètres fournis seront utilisés pour la connexion SSH que fera ''rpi-b'' vers ''rpi-a'' (l'adresse ''10.0.0.3'' n'a de sens que sur ''rpi-b'', par exemple ici). Toute la configuration relative à la connexion à ''rpi-b'' est dans l'entrée dédiée à ''rpi-b'' dans le fichier de configuration. |
| | |
| |
| |
| ------------ | |
| ==== Tuer une session SSH bloquée ==== | ==== Tuer une session SSH bloquée ==== |
| |
| |
| Enchaîner les touches ''Entrée'', ''~'' et ''.''. | Enchaîner les touches ''Entrée'', ''~'' et ''.''. |
| | |
| | |
| | |
| | ==== Tester la configuration serveur ==== |
| | |
| | [[https://www.skyminds.net/resoudre-lerreur-ssh-missing-privilege-separation-directory-run-sshd/|Source]] |
| | |
| | <code bash> |
| | sshd -t |
| | </code> |
| | |
| | Si l'erreur //Missing privilege separation directory: /run/sshd// apparaît: |
| | <code bash> |
| | mkdir -p /run/sshd |
| | </code> |
| | |
| | |
| | ==== Changer le port d'écoute ==== |
| | |
| | Changer dans le fichier ''/etc/ssh/sshd_config''. Si SystemD est utilisé, il faut aussi modifier le service qui définit la socket ([[https://askubuntu.com/questions/925452/ssh-resets-to-default-port-on-reboot|source]]) : |
| | <code bash> |
| | systemctl edit ssh.socket |
| | </code> |
| | Puis y mettre : |
| | <code> |
| | [Socket] |
| | ListenStream= |
| | ListenStream=3233 |
| | </code> |
| | |
| |