#OpenSSH # -- Principe SSH -- Le protocole SSH repose sur un chiffrement asymétrique : 2 clés, une pour chiffrer et l'autre pour déchiffrer L'utilisateur garde une clé secrète pour lui et diffuse à qui veut sa clé publique. -- Clés SSH -- Les paires de clés sont crées et placées dans /etc/ssh : clés privées : ssh_host_dsa_key, ssh_host_ecdsa_key et ssh_host_rsa_key clés publiques : ssh_host_dsa_key.pub, ssh_host_ecdsa_key.pub et ssh_host_rsa_key.pub Pour voir l'empreinte côté serveur : serveur$ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub Redémarrer le service SSH du serveur : $ sudo service ssh restart Connection à une machine distante : $ ssh <options> <utilisateur>@<IP_machine_distante> Options intéressantes : -l <nom> : se connecte sous un nom différent du courant -p <port> : se connecte à un port différent du port par défaut (TCP 22) Par exemple : $ ssh -l nimportequi -p 2222 192.168.42.21 -- Authentification des utilisateurs -- OpenSSH permet d'utiliser le système d'authentification par clé asymétrique pour valider l'identité du client qui se connect. Ainsi, vous pouvez fournir une clé privée lors de la connexion au lieu d'un mot de passe. Pour cela, on crée une paire de clés sur le client : client$ ssh-keygen Ensuite, on la place sur le serveur : client$ ssh-copy-id <IP_machine_distante> Les clés publiques utilisables pour se connecter à un utilisateur donné sont placées dans le fichier .ssh/authorized_keys de son dossier utilisateur. Vous pouvez consulter ce fichier pour valider qu'il ne contient que votre clé: serveur$ cat .ssh/authorized_keys A partir de maintenant, les connexions au serveur utiliseront la clé SSH et c'est sa phrase de passe qui sera demandée Il est possible de se connecter directement au serveur sans avoir à taper la phrase de passe à chaque fois. Pour cela, il existe l'agent SSH. Il faut utiliser la commande ssh-add pour fournir la phrase de passe à l'agent : client$ ssh-add Après cela, on peut se connecter au serveur distant sans aucune demande. -- Transfert de fichiers -- Copier des fichiers sur la machine distante de façon sécurisée via scp : client$ scp /chemin/du/fichier/a/copier/ <utilisateur>@<IP_machine_distante>:/repertoire/de/destination/ Copier des fichiers depuis la machine distante vers l'ordinateur local : client$ scp <utilisateur>@<IP_machine_distante>:/chemin/du/fichier/a/copier/ /repertoire/local/de/destination Quitter la connexion ssh : exit -- X11 forwarding -- $ ssh -X <adresse IP> -- Redirection de ports -- Redirection de la machine locale vers une machine distante : -L <port local>:<hote distant>:<port distant> Redirection d'une machine distante vers la machine locale : -R <port distant>:<hote local>:<port local> -- Configuration du client -- La configuration se fait en créant un fichier 'config' dans le répertoire .ssh du dossier perso (celui-ci remplace alors le fichier par défaut /etc/ssh/ssh_config) $ vi ~/.ssh/config Le fichier se compose de sections Host <xxx> pour lesquels on définit des paramètres, par exemple : Hostname : définit le nom d'hote réel User : permet de préciser l'utilisateur sous lequel se connecter Port : port auquel on se connecte si différent du port par défaut ForwardX11 : active la redirection des requêtes graphiques Compression : active la compression des données transférées LocalForward : équivalent de l'option -L RemoteForward : équivalent de l'option -R Exemple d'une configuration : Host serveur Hostname 192.0.2.1 User root LocalForward 1143 localhost:143 Host pcperso Hostname 192.0.2.42 User jeankevin Port 2222 ForwardX11 yes Compression yes On peut alors faire : $ ssh serveur Au lieu d'avoir à taper : $ ssh root@192.0.2.1 -L 1143:localhost:143