all:bibles:linux:reseau:ssh
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| all:bibles:linux:reseau:ssh [2024/10/10 14:35] – [Dépannage] omeylhoc | all:bibles:linux:reseau:ssh [2025/02/19 10:48] (Version actuelle) – [Lenteur de connexion] omeylhoc | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== SSH ====== | ||
| + | |||
| + | ---- | ||
| + | |||
| + | <note tip>Pour éviter de confirmer l' | ||
| + | ssh < | ||
| + | </ | ||
| + | ---- | ||
| + | |||
| + | ===== Configuration ===== | ||
| + | |||
| + | ==== Fichier de configuration générale ==== | ||
| + | |||
| + | <color # | ||
| + | |||
| + | < | ||
| + | ListenAddress 192.168.0.50 N’écoute que depuis ces interfaces. | ||
| + | ListenAddress 192.168.1.50 | ||
| + | LoginGraceTime 20 Si pas de connexion avant 20s le serveur se déconnecte | ||
| + | PermitRootLogin no Interdiction de se connecter en tant que root | ||
| + | PasswordAuthentication no Pas d’identification par mot de passe | ||
| + | UseDNS no Pas de reverse DNS lors de la connexion | ||
| + | # ajouter à la fin du fichier : | ||
| + | AllowUsers administrateur autoriser uniquement les utilisateurs listés | ||
| + | AddressFamily inet uniquement IPV4 | ||
| + | </ | ||
| + | |||
| + | ==== Fichier de configuration par serveur ==== | ||
| + | |||
| + | <color # | ||
| + | |||
| + | < | ||
| + | Host < | ||
| + | Hostname < | ||
| + | User < | ||
| + | IdentityFile <chemin vers clef ssh privée au format openssh> | ||
| + | Port < | ||
| + | </ | ||
| + | |||
| + | Avec la configuration de ce fichier on pourra remplacer la commande : | ||
| + | |||
| + | <code bash> | ||
| + | ssh -i <chemin vers clef ssh privée au format openssh> < | ||
| + | </ | ||
| + | |||
| + | par | ||
| + | |||
| + | <code bash> | ||
| + | ssh < | ||
| + | </ | ||
| + | |||
| + | <note tip>Le fichier de configuration sera pris en compte par la commande rsync.</ | ||
| + | |||
| + | ==== Echange de clefs ==== | ||
| + | |||
| + | === Génération de la clef === | ||
| + | |||
| + | <code bash> | ||
| + | ssh-keygen –t rsa [-C commentaire] | ||
| + | </ | ||
| + | |||
| + | Le paramètre -C permet l' | ||
| + | |||
| + | === Transfert de la clef === | ||
| + | |||
| + | Copier la clef générée (~/ | ||
| + | |||
| + | <note warning> | ||
| + | |||
| + | Possibilité d' | ||
| + | |||
| + | <code bash> | ||
| + | ssh-copy-id -i ~/ | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | [[all: | ||
| + | |||
| + | ===== Accès sftp resteint ===== | ||
| + | |||
| + | ==== Création utilisateur ==== | ||
| + | |||
| + | <code bash> | ||
| + | sudo groupadd pproject | ||
| + | sudo useradd -g pproject -d / | ||
| + | sudo passwd pproject | ||
| + | sudo chown root: | ||
| + | sudo chmod 755 / | ||
| + | sudo mkdir / | ||
| + | chown pproject: | ||
| + | chmod 755 / | ||
| + | </ | ||
| + | |||
| + | ==== Configuration SSH ==== | ||
| + | |||
| + | Dans le fichier <color # | ||
| + | #Subsystem sftp / | ||
| + | |||
| + | Ajouter à la <color # | ||
| + | |||
| + | < | ||
| + | Subsystem sftp internal-sftp | ||
| + | Match User pproject | ||
| + | ChrootDirectory %h | ||
| + | ForceCommand internal-sftp | ||
| + | X11Forwarding no | ||
| + | AllowTCPForwarding no | ||
| + | </ | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | <note warning> | ||
| + | |||
| + | ==== Dépannage ==== | ||
| + | |||
| + | En cas de problème consulter les erreurs dans le fichier <color # | ||
| + | |||
| + | ---- | ||
| + | |||
| + | [[all: | ||
| + | |||
| + | ===== Tunnel SSH ===== | ||
| + | |||
| + | La machine A ne peut pas accéder directement à la machine C mais accède à la machine B qui elle peut accéder à la machine C. | ||
| + | |||
| + | ==== Création du tunnel ==== | ||
| + | |||
| + | Sur la machine B créer un tunnel vers C en utilisant un port pour la redirection : | ||
| + | ssh –L <Serveur B>:< | ||
| + | |||
| + | Possibilité d' | ||
| + | < | ||
| + | -N : pour ne pas passer de commande sur la machine cible. | ||
| + | -f : la commande est exécuté en tâche de fond et on récupère la main. | ||
| + | </ | ||
| + | |||
| + | <note tip>Si on lance en tâche de fond avec l' | ||
| + | |||
| + | ==== Maintien du tunnel ==== | ||
| + | |||
| + | * **ServerAliveInterval** : durée en secondes après laquelle si aucune donnée n'a été reçue du serveur, un message sera envoyé au serveur. Par défaut 0 indiquant pas d' | ||
| + | * **ServerAliveCountMax** : valeur par défaut 3. Si ServerAliveInterval=15 et ServerAliveCountMax=3, | ||
| + | |||
| + | ==== Exemples ==== | ||
| + | |||
| + | === Redirige le port mySQL 3306 local sur le port 3306 de la machine distante === | ||
| + | |||
| + | <code bash> | ||
| + | #! /bin/bash | ||
| + | while : | ||
| + | do | ||
| + | echo " | ||
| + | ssh -L 3306: | ||
| + | echo " | ||
| + | sleep 1 | ||
| + | done | ||
| + | </ | ||
| + | |||
| + | === Tunnel inverse === | ||
| + | |||
| + | Imaginons que la machine B n' | ||
| + | |||
| + | * Sur machine A : ouverture d'un tunnel depuis la machine B via le port 30022 distant sur le port 22 local | ||
| + | |||
| + | <code bash> | ||
| + | ssh -fN -R 30022: | ||
| + | </ | ||
| + | |||
| + | * Sur machine B : connexion en ssh sur machine A | ||
| + | |||
| + | <code bash> | ||
| + | ssh -p 30022 <user A> | ||
| + | </ | ||
| + | |||
| + | ==== Vérification ==== | ||
| + | |||
| + | On pourra vérifier l' | ||
| + | |||
| + | <code bash> | ||
| + | netstat -tlna | ||
| + | ss -tlna | ||
| + | </ | ||
| + | |||
| + | ==== Connexion via le tunnel ==== | ||
| + | |||
| + | Sur la machine A accéder à C au travers de B et du port choisi : | ||
| + | ssh <Serveur B> -p < | ||
| + | |||
| + | ==== Tunnel ssh via Putty ==== | ||
| + | |||
| + | Dans cet exemple on va se connecter en http (port 80) sur un serveur distant en passant outre un éventuel firewall qui bloquerait le http. | ||
| + | |||
| + | * Dans la fenêtre putty renseigner les éléments habituels (IP, port, ...) | ||
| + | * Aller dans la rubrique « Connection / SSH /Tunnels » | ||
| + | * Renseigner « Source port » avec un port qui va être utilisé localement pour le rediriger (ex 8080) | ||
| + | * Renseigner « Destination » avec l' | ||
| + | * Ajouter derrière cette adresse le numéro de port (par exemple :80) | ||
| + | * Cliquer sur le bouton « Add » puis lancer la session | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | * Le tunnel est ouvert il suffit de lancer un navigateur avec l'url http:// | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | ---- | ||
| + | |||
| + | [[all: | ||
| + | |||
| + | ===== Montage réseau au travers de SSH ===== | ||
| + | |||
| + | ==== Prérequis ==== | ||
| + | |||
| + | L' | ||
| + | |||
| + | <code bash> | ||
| + | adduser < | ||
| + | </ | ||
| + | |||
| + | ==== Utilisation ==== | ||
| + | |||
| + | === Montage === | ||
| + | |||
| + | <code bash> | ||
| + | sshfs < | ||
| + | </ | ||
| + | |||
| + | === Démontage === | ||
| + | |||
| + | <code bash> | ||
| + | fusermount -u <point de montage> | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | [[all: | ||
| + | |||
| + | ===== Putty à partir de Windows ===== | ||
| + | |||
| + | ==== Connexion par clef ==== | ||
| + | |||
| + | === Génération clef === | ||
| + | |||
| + | Génération de clef avec puttygen.exe. Sauvegarde clef privée et clef publique. | ||
| + | Copier/ | ||
| + | |||
| + | === Utilisation de la clef === | ||
| + | |||
| + | Change Settings…/ | ||
| + | Change Settings…/ | ||
| + | |||
| + | Utilisation possible en ligne de commande avec psftp pour faire du transfert de fichiers sécurisé en sftp avec nom de session mémorisé : | ||
| + | psftp <nom session> | ||
| + | |||
| + | ==== X11 forwarding ==== | ||
| + | |||
| + | Dans Connection/ | ||
| + | |||
| + | Lancer X-Ming avec « Multiple windows » / « Start no client » puis « Suivant » et « Terminer ». | ||
| + | |||
| + | ---- | ||
| + | |||
| + | [[all: | ||
| + | |||
| + | ===== Convertir format clef ===== | ||
| + | |||
| + | ==== Installation outils ==== | ||
| + | |||
| + | <code bash> | ||
| + | sudo apt install putty-tools | ||
| + | </ | ||
| + | |||
| + | ==== Utilisation ==== | ||
| + | |||
| + | === Putty vers openssh === | ||
| + | |||
| + | * Générer la clef privée | ||
| + | |||
| + | <code bash> | ||
| + | puttygen clef.ppk -O private-openssh -o id_dsa | ||
| + | </ | ||
| + | |||
| + | * Générer la clef publique | ||
| + | |||
| + | <code bash> | ||
| + | puttygen clef.ppk -O public-openssh -o id_dsa.pub | ||
| + | </ | ||
| + | |||
| + | === openssh vers Putty === | ||
| + | |||
| + | <code bash> | ||
| + | puttygen id_rsa -o cleprive.ppk | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | [[all: | ||
| + | |||
| + | ===== Dépannage ===== | ||
| + | |||
| + | ==== Debug ==== | ||
| + | |||
| + | === Côté client === | ||
| + | |||
| + | Pour obtenir plus d' | ||
| + | ssh -v <@IP> | ||
| + | |||
| + | === Côté serveur === | ||
| + | |||
| + | Ajouter la ligne suivante dans le fichier **/ | ||
| + | |||
| + | LogLevel VERBOSE | ||
| + | |||
| + | <note tip>Les valeurs possibles sont QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3.</ | ||
| + | |||
| + | Les informations sont dans le fichier de log : | ||
| + | tail -f / | ||
| + | tail -f / | ||
| + | |||
| + | ==== L' | ||
| + | |||
| + | === Restriction d' | ||
| + | |||
| + | Vérifier que le droits d' | ||
| + | chmod 0700 ~/.ssh | ||
| + | |||
| + | === Restriction à la console === | ||
| + | |||
| + | Vérifier l' | ||
| + | |||
| + | CONSOLE=/ | ||
| + | |||
| + | sinon l' | ||
| + | |||
| + | === ping ne fonctionne pas === | ||
| + | |||
| + | Si même le ping ne fonctionne pas, vérifier les fichiers **/ | ||
| + | |||
| + | === En désespoir de cause === | ||
| + | |||
| + | Supprimer le répertoire ~/.ssh et faire un ssh-keygen pour laisser le système créer le répertoire avec les droits restreints. | ||
| + | |||
| + | ==== Lenteur de connexion ==== | ||
| + | |||
| + | Lors de connexion le serveur ssh distant lance une résolution DNS inverse qui peut être longue (surtout si aucun serveur DNS n'est accessible). \\ | ||
| + | Pour gagner du temps il est possible de désactiver cette procédure en ajoutant la ligne suivante dans le fichier **/ | ||
| + | |||
| + | <code bash> | ||
| + | UseDNS no | ||
| + | </ | ||
| + | |||
| + | Redémarrer le service ssh. | ||
| + | |||
| + | Si les symptômes persistent ajouter également la ligne suivante : | ||
| + | |||
| + | <code bash> | ||
| + | GSSAPIAuthentication no | ||
| + | </ | ||
| + | |||
| + | ou bien en ligne de commande | ||
| + | |||
| + | <code bash> | ||
| + | ssh -o GSSAPIAuthentication=no user@serveur | ||
| + | </ | ||
| + | |||
| + | ==== no matching host key type found. Their offer: ssh-dss ==== | ||
| + | |||
| + | === Connexion sur OS6850 === | ||
| + | |||
| + | Ajouter les options suivantes : | ||
| + | ssh -o HostKeyAlgorithms=+ssh-dss -m hmac-md5 <@IP> | ||
| + | |||
| + | === Connexion sur OA C7000 === | ||
| + | |||
| + | Créer un fichier **~/ | ||
| + | |||
| + | < | ||
| + | Host 10.35.132.9 | ||
| + | HostkeyAlgorithms +ssh-dss | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== Connexion aléatoire ==== | ||
| + | |||
| + | === Problème === | ||
| + | |||
| + | La connexion ssh fonctionne de façon aléatoire en Wifi (voir pas du tout) alors que cela fonctionne en filaire. Par ailleurs les requêtes http passent sans problème en Wifi. Problème rencontré sur Raspberry Pi. | ||
| + | |||
| + | === Désactiver la mise en veille du Wifi === | ||
| + | |||
| + | Interroger l' | ||
| + | |||
| + | <code bash> | ||
| + | iwconfig | ||
| + | </ | ||
| + | |||
| + | Vérifier la ligne Power Management (on ou off) ou interroger directement : | ||
| + | |||
| + | <code bash> | ||
| + | iw wlan0 get power_save | ||
| + | </ | ||
| + | |||
| + | Désactiver la mise en veille : | ||
| + | |||
| + | <code bash> | ||
| + | iw wlan0 set power_save off | ||
| + | </ | ||
| + | |||
| + | A positionner éventuellement dans le fichier <color # | ||
| + | |||
| + | === Baisser la mtu sur l' | ||
| + | |||
| + | Essayer de baisser la mtu sur l' | ||
| + | |||
| + | <code bash> | ||
| + | ifconfig wlan0 mtu 1200 | ||
| + | </ | ||
| + | |||
| + | A positionner éventuellement dans le fichier <color # | ||
| + | |||
| + | === Qualité de service === | ||
| + | |||
| + | Ajouter la ligne suivante dans le fichier <color # | ||
| + | |||
| + | <code bash> | ||
| + | IPQoS cs0 cs0 | ||
| + | </ | ||
| + | |||
| + | puis redémarrer le service : | ||
| + | |||
| + | <code bash> | ||
| + | systemctl restart sshd | ||
| + | </ | ||
| + | |||
| + | ==== Déconnexion ==== | ||
| + | |||
| + | En cas de déconnexion trop rapide il est possible de customiser le délai. | ||
| + | |||
| + | === sshd_config === | ||
| + | |||
| + | Dans le fichier <color # | ||
| + | |||
| + | <code bash> | ||
| + | ClientAliveInterval 1200 | ||
| + | ClientAliveCountMax 3 | ||
| + | </ | ||
| + | |||
| + | La valeur du délai d' | ||
| + | |||
| + | <code bash> | ||
| + | ClientAliveInterval 3600 | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | === Putty === | ||
| + | |||
| + | Avec Putty il est également possible de spécifier le paramètre « Seconds beetween keepalives (0 to to turn off) » dans la catégorie « Connection » pour maintenir la session ouverte. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ==== Pseudo-terminal will not be allocated because stdin is not a terminal ==== | ||
| + | |||
| + | Solution : essayer ssh avec l' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | [[all: | ||
| + | |||
