====== SSH : Administration distante sécurisée ====== === Contributeurs === (SISR2-2016) Anthony Varin, Alexandre Saligny ===== Installation du paquet ssh ===== Utiliser la commande : apt install ssh //ou apt install openssh-server ===== Connexion distante ===== La connexion distante à une machine hébergeant le service SSH s'établit par la commande //**ssh**// ou un client dédié comme //**[[putty|Putty]]**//. ssh -l //ou ssh @ ==== Restriction d'accès ==== Pour des raisons de sécurité, l'établissement d'une connexion en SSH avec un compte super-utilisateur n'est plus autorisée (il existe des commandes pour lever cette interdiction, au risque d'ouvrir une faille de sécurité dans le système ; voir ci-après). Il est donc nécessaire de suivre la procédure suivante : - créer un compte non //super-utilisateur// sur la machine hébergeant le service SSH - se connecter avec le //client SSH// de votre choix, en utilisant ce compte - une fois la connexion établie (et les échanges sécurisés), basculer en //mode super-utilisateur// ==== Accès root ==== Pour autoriser l'accès distant avec un compte //root// (déconseillé, à réserver à des cas précis et obligatoires), on éditera le fichier **// /etc/ssh/sshd_config //**, pour y ajouter ou décommenter la ligne : PermitRootLogin yes ===== Gérer l'établissement d'une connexion distante récurrente ===== Lorsque l'on souhaite établir une connexion distante récurrente sans nécessiter de renseigner le compte et le mot de passe à chaque connexion (par exemple pour automatiser une sauvegarde), on réalisera la procédure suivante : * créer une clé et son certificat (clé publique .pub) sur une machine qui devra accéder à une cible de façon récurrente * copier le certificat (clé publique) sur la cible ==== Démarche ==== === Création des éléments de sécurité === Pour créer la clé et son certificat, on utilisera la commande : ssh-keygen –t {rsa|dsa} [-b ] * est une puissance de 2 précisant la complexité de la clé (1024, 2048, etc) une fois la commande exécutée ce type de message apparaît. \\ On peut renseigner la //passphrase// si on veut sécuriser la connexion par un code d'accès Generating public/private rsa key pair. Enter file in which to save the key (/~root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): #(la passphrase crypte la clé publique est augmentent ainsi la sécurité de la communication) Enter same passphrase again: Your identification has been saved in /~root/.ssh/id_rsa. Your public key has been saved in /~root/.ssh/id_rsa.pub. The key fingerprint is: da:21:b7:c9:ef:81:76:de:80:02:54:51:06:03:17:25 The key's randomart image is: +--[ RSA 2048]----+ | ..E*+ | | o + | | . | | . | | . . S | | . * * | | o O + | | o + + | | .+ . | +-----------------+ === Copie de la clé sur la cible === On peut alors recopier la clé sur la cible, ce qui permettra ensuite d'établir une connexion SSH sans interaction avec le utilisé pour la copie. ssh-copy-id -i @ * la clé publique générée par //ssh-keygen// se trouve par défaut dans **// /root/.ssh/ //** sous le nom **//id_rsa.pub//**. A TRIER et replacer au bon endroit La commande **ssh-add** : permet de sauvegarder la //**passphrase**// dans une mémoire cache, car sinon il redemande à chaque fois qu'on relance le script, la passphrase. Mais si on éteint la machine, il oublie la passphrase. Si la commande ne fonctionne pas il faut utiliser la commande **ssh-agent /bin/bash** puis retaper la commande **ssh-add** Installation du paquet **sshpass** avec la commande : apt install sshpass Pour éviter de devoir renseigner le mot de passe à chaque fois dans le script . Script.bash : #! /bin/bash echo off while read nom ip do sshpass –f motpasse.txt ssh-copy-id –i id_rsa.pub $nom@$ip echo –e "machine" $ip "déployée" >> sshpass.log done < ./machine.csv * **#! /bin/bash** (pour afficher la syntaxe en couleur) * **echo off** (pour ne pas afficher l’echo présent plus bas) * **while read nom ip** (lit chaque donnée du fichier) * **eo** (pour faire une boucle) * **sshpass –f motpasse.txt ssh-copy-id –i id_rsa.pub $nom@$ip** (sshpass –f motpasse.txt sert à dire que à chaque demande du mot de passe l'information se trouve dans le fichier texte, ssh-copy-id –i id_rsa.pub pour envoyer la clé publique au machine définie dans le fichier csv) * **echo –e "machine" $ip "déployée" >> sshpass.log **(cette ligne sert à créer un fichier log qui dit quelle adresse Ip est déployée) * **done<./machine.csv** (done pour dire que la boucle à exécuter est terminée, et on précise le fichier dont on lit le contenu) Installer le paquet ssh sur les postes utilisateurs avec la commande : **apt-get install ssh**