====== SSH ====== ---- Pour éviter de confirmer l'ajout du fingerprint au fichier known_hosts ajouter l'option : ssh @ -o StrictHostKeyChecking=no ---- ===== Configuration ===== ==== Fichier de configuration générale ==== **/etc/ssh/sshd_config** 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 ==== **~/.ssh/config** Host Hostname User IdentityFile Port Avec la configuration de ce fichier on pourra remplacer la commande : ssh -i @ par ssh Le fichier de configuration sera pris en compte par la commande rsync. ==== Echange de clefs ==== === Génération de la clef === ssh-keygen –t rsa [-C commentaire] Le paramètre -C permet l'ajout d'un commentaire en fin de ligne pour distinguer les clefs dans le fichier authorized_keys. Par défaut il s'agit souvent d'un username@hostname. === Transfert de la clef === Copier la clef générée (~/.ssh/id_rsa.pub) vers la machine à laquelle on veut donner l'accès (dans le fichier ~/.ssh/authorized_keys). Le répertoire .ssh ne doit pas être accessible par un autre utilisateur. Si le répertoire est créé manuellement penser à corriger les droits d'accès par un chmod Possibilité d'utiliser directement la commande : ssh-copy-id -i ~/.ssh/id_rsa.pub user@host ---- [[all:bibles:linux:reseau:ssh|Haut de page]] ===== Accès sftp resteint ===== ==== Création utilisateur ==== sudo groupadd pproject sudo useradd -g pproject -d /home/pproject -m -s /bin/false pproject sudo passwd pproject sudo chown root:pproject /home/pproject sudo chmod 755 /home/pproject sudo mkdir /home/pproject/11-Projects chown pproject:pproject /home/pproject/11-Projects chmod 755 /home/pproject/11-Projects ==== Configuration SSH ==== Dans le fichier /etc/ssh/sshd_config mettre en commentaire la ligne : #Subsystem sftp /usr/lib/openssh/sftp-server Ajouter à la **fin** du fichier : Subsystem sftp internal-sftp Match User pproject ChrootDirectory %h ForceCommand internal-sftp X11Forwarding no AllowTCPForwarding no Tout ce qui suit la ligne Match jusqu'à la fin du fichier ou la prochaine occurrence de Match concerne cette restriction. ChrootDirectory : le répertoire doit appartenir à root:root avec droits 755. Le contenu appartient à l’utilisateur avec droits 775. ==== Dépannage ==== En cas de problème consulter les erreurs dans le fichier /var/log/auth.log. ---- [[all:bibles:linux:reseau:ssh|Haut de page]] ===== 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 :::22 @ Possibilité d'ajouter les options suivantes : -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. Si on lance en tâche de fond avec l'option -f il faudra killer le process pour fermer le tunnel ==== 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'envoi de messages. Uniquement version 2 du protocole. * **ServerAliveCountMax** : valeur par défaut 3. Si ServerAliveInterval=15 et ServerAliveCountMax=3, si le serveur ne répond plus, il y aura déconnexion au bout de 45s. Uniquement version 2 du protocole. ==== Exemples ==== === Redirige le port mySQL 3306 local sur le port 3306 de la machine distante === #! /bin/bash while : do echo "Ouverture du tunnel $(date)" ssh -L 3306:127.0.0.1:3306 -N -o ServerAliveInterval=5 -o ServerAliveCountMax=2 @ echo "Fermeture du tunnel $(date)" sleep 1 done === Tunnel inverse === Imaginons que la machine B n'accède pas à la machine A mais la machine A accède à la machine B. * Sur machine A : ouverture d'un tunnel depuis la machine B via le port 30022 distant sur le port 22 local ssh -fN -R 30022:localhost:22 @ * Sur machine B : connexion en ssh sur machine A ssh -p 30022 @localhost ==== Vérification ==== On pourra vérifier l'ouverture du port par la commande netstat ou ss : netstat -tlna ss -tlna ==== Connexion via le tunnel ==== Sur la machine A accéder à C au travers de B et du port choisi : ssh -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'adresse locale distance (exemple 127.0.0.1 ou une adresse privée accessible de la machine distante) * Ajouter derrière cette adresse le numéro de port (par exemple :80) * Cliquer sur le bouton « Add » puis lancer la session {{ :all:bibles:linux:reseau:putty_tunnel_ssh.jpg?400 |}} * Le tunnel est ouvert il suffit de lancer un navigateur avec l'url http://localhost:8080 L'utilisation des port jusqu'à 1024 nécessite des droits administrateur ---- [[all:bibles:linux:reseau:ssh|Haut de page]] ===== Montage réseau au travers de SSH ===== ==== Prérequis ==== L'utilisateur doit appartenir au groupe fuse : adduser fuse ==== Utilisation ==== === Montage === sshfs <@IP>: === Démontage === fusermount -u ---- [[all:bibles:linux:reseau:ssh|Haut de page]] ===== 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/coller de la clef publique depuis la zone pour OpenSSH dans le fichier **~/.ssh/authorized_keys** === Utilisation de la clef === Change Settings…/Connection/Data remplir Auto-login username avec le nom d'utilisateur/ Change Settings…/Connection/SSH/Auth indiquer le chemin pour accéder au fichier de la clef privée clef.ppk 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 ==== X11 forwarding ==== Dans Connection/SSH/X11 cocher « Enable X11 forwarding » et mettre 127.0.0.1:0.0 pour « X display location ». Lancer X-Ming avec « Multiple windows » / « Start no client » puis « Suivant » et « Terminer ». ---- [[all:bibles:linux:reseau:ssh|Haut de page]] ===== Convertir format clef ===== ==== Installation outils ==== sudo apt install putty-tools ==== Utilisation ==== === Putty vers openssh === * Générer la clef privée puttygen clef.ppk -O private-openssh -o id_dsa * Générer la clef publique puttygen clef.ppk -O public-openssh -o id_dsa.pub === openssh vers Putty === puttygen id_rsa -o cleprive.ppk ---- [[all:bibles:linux:reseau:ssh|Haut de page]] ===== Dépannage ===== ==== Debug ==== === Côté client === Pour obtenir plus d'information ajouter l'option verbose : ssh -v <@IP> === Côté serveur === Ajouter la ligne suivante dans le fichier **/etc/ssh/sshd_config** LogLevel VERBOSE Les valeurs possibles sont QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3. Les informations sont dans le fichier de log : tail -f /var/log/secure ⇒ Redhat/CentOS tail -f /var/log/syslog ⇒ Debian/Ubuntu ==== L'identification par clef ne fonctionne pas ==== === Restriction d'accès aux clefs === Vérifier que le droits d'accès au répertoire ~/.ssh sont bien restreints au seul propriétaire. Corriger par la commande : chmod 0700 ~/.ssh === Restriction à la console === Vérifier l'absence de la ligne suivante dans le fichier **/etc/default/login** CONSOLE=/dev/ sinon l'accès ne peut se faire que depuis la console système. === ping ne fonctionne pas === Si même le ping ne fonctionne pas, vérifier les fichiers **/etc/hosts**, **/etc/ethers** et **dhcpd.conf** qui peuvent contenir des informations contradictoires et, dans le doute, interdire la connexion par sécurité. === 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 **/etc/ssh/sshd_config** : UseDNS no Redémarrer le service ssh. Si les symptômes persistent ajouter également la ligne suivante : GSSAPIAuthentication no ou bien en ligne de commande 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 **~/.ssh/config** 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'interface sans fil iwconfig Vérifier la ligne Power Management (on ou off) ou interroger directement : iw wlan0 get power_save Désactiver la mise en veille : iw wlan0 set power_save off A positionner éventuellement dans le fichier /etc/rc.local. === Baisser la mtu sur l'interface === Essayer de baisser la mtu sur l'interface : ifconfig wlan0 mtu 1200 A positionner éventuellement dans le fichier /etc/rc.local. === Qualité de service === Ajouter la ligne suivante dans le fichier /etc/ssh/sshd_config IPQoS cs0 cs0 puis redémarrer le service : 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 /etc/ssh/sshd_config modifier les 2 variables suivantes : ClientAliveInterval 1200 ClientAliveCountMax 3 La valeur du délai d'expiration sera de 1200 secondes * 3 soit 1 h. On peut obtenir le même résultat en spécifiant le paramètre ClientAliveInterval seul : ClientAliveInterval 3600 #ClientAliveCountMax 3 === 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. {{:all:bibles:linux:reseau:ssh.png?400|}} ==== Pseudo-terminal will not be allocated because stdin is not a terminal ==== Solution : essayer ssh avec l'option -t ---- [[all:bibles:linux:reseau:ssh|Haut de page]]