Table des matières
SSH
ssh <user>@<serveur> -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 <nom_host>
Hostname <adressIP>
User <user>
IdentityFile <chemin vers clef ssh privée au format openssh>
Port <port>
Avec la configuration de ce fichier on pourra remplacer la commande :
ssh -i <chemin vers clef ssh privée au format openssh> <user>@<adresseIP>
par
ssh <nom_host>
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).
Possibilité d'utiliser directement la commande :
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
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
Dépannage
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>:<port>:<Serveur C>:22 <user>@<Serveur C>
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.
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 <user>@<IP address> 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 <user B>@<machine B>
- Sur machine B : connexion en ssh sur machine A
ssh -p 30022 <user A>@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 <Serveur B> -p <port>
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
- Le tunnel est ouvert il suffit de lancer un navigateur avec l'url http://localhost:8080
Montage réseau au travers de SSH
Prérequis
L'utilisateur doit appartenir au groupe fuse :
adduser <utilisateur> fuse
Utilisation
Montage
sshfs <@IP>:<chemin> <point de montage>
Démontage
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 <nom session>
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 ».
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
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 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.


