Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ====== SSH ====== * ''-i <cle_privee>'': permet de préciser avec quelle clé privée on souhaite s'authentifier * ''-v'': mode verbose * ''-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>'' * ''-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. Le dossier ''.ssh'' doit avoir les permissions 700. * [[https://www.memorandum.ovh/alerte-telegram-connexion-ssh/]] * [[https://lord.re/posts/187-ssh-key-restricted-rsync-backup/]] * [[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 ==== * [[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 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'' !) * ''PreferredAuthentications=password'': passer directement à la méthode d'authentification par mot de passe, sans essayer les clés privée du dossier ''.ssh'' * ''ForwardAgent=yes'': les clés SSH du client suivent dans les connexions distantes (utile pour faire des connexions SSH imbriquées) ==== 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 B va transmettre les données d'un port qu'il expose vers un port de C. C recevra les données que A envoie à B. <code bash> ssh -N -R <port de B>:<adresse IP locale de C>:<port de C> <IP de B> </code> === Utiliser un serveur de rebond === [[https://geekfault.org/2011/02/19/reverse-ssh-acceder-a-un-serveur-derriere-un-natfirewall/|Source]] On peut se servir de cette commande pour connecter l'ordinateur C à un serveur de rebond B lorsque C n'est pas accessible depuis l'extérieur d'un réseau. {{ http://geekfault.org/wp-content/uploads/2011/02/reverse-ssh-firewall.jpg |A gauche: machine C, à droite: serveur de rebond B}} Sur la machine C: <code bash> ssh -NTR 2222:localhost:22 user@serveur-rebond-b </code> Ainsi le port 22 de C sera accessible localement depuis le serveur de rebond B par le port 2222. Il faut s'assurer sur le serveur de rebond B que ''AllowTcpForwarding yes'' soit présent dans le fichier ''/etc/ssh/sshd_config'' et que le port 2222 ne soit pas bloqué par un parefeu. Pour accéder à la machine C depuis le serveur B: <code bash> ssh -p 2222 user-c@localhost </code> === Tunnel pour faire passer le trafic d'un port par SSH === <code bash> ssh -NL <local port>:localhost:<remote port> remote_host </code> [[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 === * ''-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 ==== <code bash> ssh-copy-id [-i clé] [user@]hostname </code> Le mot de passe du compte distant est demandé. ==== Agent SSH ==== Ajouter une clé à l'agent SSH: <code bash> ssh-add ~/.ssh/id_rsa </code> Lister les clés connues par l'agent SSH: <code bash> ssh-add -l # ou -L </code> Supprimer toutes les clés connues de l'agent: <code bash> ssh-add -D </code> Automatiquement charger les clés SSH dans l'agent ([[https://superuser.com/questions/325662/how-to-make-ssh-agent-automatically-add-the-key-on-demand|Source]]): <code conf ~/.ssh/config> AddKeysToAgent yes </code> Réévaluer l'agent, si les commandes comme ''ssh-add'' ne parviennent pas à se connecter à l'agent SSH, mais que la commande ''ssh-agent'' renvoie quelque chose de cohérent, il peut être nécessaire de saisir la commande suivante: <code bash> eval "$(ssh-agent)" </code> Effacer les clés de l'agent SSH ([[https://serverfault.com/a/891019|Source]]): <code bash> sudo pkill -9 gnome-keyring-daemon eval $(ssh-agent) ssh-add -l # ne renvoie rien </code> * [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=472477]] ==== Empêcher OpenSSH de donner son OS ==== Valable uniquement sur Debian. <code conf /etc/ssh/sshd_config> DebianBanner no </code> ==== Monter un système de fichier SSHFS ==== * [[https://doc.ubuntu-fr.org/sshfs]] Installer le paquet ''sshfs''. Montage: <code bash> sshfs host:[folder] [mounpoint] </code> Démontage: <code bash> fusermount -u [mountpoint] </code> ==== X Forwarding ==== Utiliser ''ssh -X''. Si une erreur du style ''x11 forwarding request failed on channel 0'' apparaît, essayer la configuration suivante: <file conf /etc/sshd/sshd_config> X11Forwarding yes X11UseLocalhost no </file> ==== Fichier ssh/config ==== La configuration est documentée dans la page de man de ''ssh_config''. <file conf ~/.ssh/config> ForwardAgent yes # transmet les clés SSH du client, pour qu'elles soient disponibles dans la session SSH Host alias # permet de faire ssh alias HostName real.fqdn.foo IdentityFile ~/.ssh/key_rsa User login ForwardX11 yes </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 ==== [[https://askubuntu.com/questions/53119/how-do-i-kill-a-locked-ssh-session|Source]] 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> linux/ssh.txt Dernière modification : 2024/09/03 09:29de phsw