{{tag>Brouillon Réseaux Sécurité}} # Connexion par clefs SSH - exemple Voir aussi : [[ssh_clefs|Notes clefs SSH]] ## Première connexion // Client // ~~~bash ssh utilisateur1@192.168.205.21 ~~~ Comme c'est la première fois que vous vous connectez à cette machine, l'empreinte n'est pas encore connue. C'est pour éviter qu'un pirate se fasse passer pour votre serveur. Répondre **yes** ~~~ The authenticity of host '192.168.205.21 (192.168.205.21)' can't be established. ECDSA key fingerprint is 3e:4b:eb:d2:cb:90:ad:f7:64:b5:2e:eb:9f:d8:3a:ab. Are you sure you want to continue connecting (yes/no)? yes ~~~ ## ssh config Pour nous simplifier la vie et ne pas taper à chaque fois l'IP, le numéro de port et l'utilisateur, nous allons enregistrer tout cela dans un fichier de config // Client // ''~/.ssh/config'' ~~~ Host serv1 Hostname 192.168.205.21 User utilisateur1 Port 22 ~~~ Le caractère '**~**' signifie le **HOME** de l'utilisateur, c'est-à-dire son répertoire par défaut (voir ''/etc/passwd'') Maintenant nous pouvons nous connecter // Client // ~~~bash ssh serv1 ~~~ ## Connexion par clef Avons-nous déjà une paire de clefs ? // Client // ~~~bash ls -l ~/.ssh/id_* ~~~ Si non (aucun fichier trouvé), créons une paire // Client // ~~~bash ssh-keygen #ssh-keygen -t ecdsa -b 521 ~~~ Ou par script ~~~bash if [ ! -e ~/.ssh/id_rsa ] then ssh-keygen -q -N "" < /dev/zero fi ~~~ Appuyer trois fois sur entrée (valeur par défaut) // Client // ~~~bash ls -l ~/.ssh/id_* ~~~ ~~~ -rw------- 1 jean jean 1679 mai 12 15:44 /home/jean/.ssh/id_rsa -rw-r----- 1 jean jean 394 mai 12 15:44 /home/jean/.ssh/id_rsa.pub ~~~ Nous avons deux fichiers : * **id_rsa.pub** : Clef publique RSA, le fichier peut être distribué à tous, même sur le web * **id_rsa** : Clef privée RSA, fichier **à garder précieusement**. À ne jamais distribuer à personne Jetons un œil à la clef publique // Client // ''~/.ssh/id_rsa.pub'' ~~~ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgQYGWtV+70Zegq7gVS+h/OsSi3tvhcp3o1HemKhkORlbLSSMM60dkhid5rcy9e/NUhMElbpBE46CkRqvRLKFsqMwTkEVJoRkjGXi/w/mHu/1RqSVUBwFkXL3lJSrWAHgV1T5kXeq9z8LgoJgCdEfb4UF9XSYasPhaL6wT9T+TJ6VfEhKDOhV5IcJ8J6HQG0MW3NnAztVnHj4a8ZuAcVR9/cs+hWpQiEuixkSmsUHN7b6XJ+JOJiP3MBodIfMPEfd1IDLHA8uOuqGWeQPeUh0nPcLlnJnJ6cw40Ejhg80KCSFN8uOVigWwAimo0FCGxNNYqAtTDipuK5l0JKUG5YKV jean@debian2 ~~~ ## Autorisation Maintenant j'aimerais bien pouvoir me connecter sans mot de passe à serv1 (utilisateur1@192.168.205.21). Rien de plus simple, je vais déposer ma clef publique (on ne copie jamais sa clef privée !) dans le HOME de utilisateur1 sur 192.168.205.21. Pour être exacte il faut ajouter la clef publique dans ''~/.ssh/authorized_keys''. // Serveur // ~~~ mkdir ~/.ssh cat <> /root/.ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgQYGWtV+70Zegq7gVS+h/OsSi3tvhcp3o1HemKhkORlbLSSMM60dkhid5rcy9e/NUhMElbpBE46CkRqvRLKFsqMwTkEVJoRkjGXi/w/mHu/1RqSVUBwFkXL3lJSrWAHgV1T5kXeq9z8LgoJgCdEfb4UF9XSYasPhaL6wT9T+TJ6VfEhKDOhV5IcJ8J6HQG0MW3NnAztVnHj4a8ZuAcVR9/cs+hWpQiEuixkSmsUHN7b6XJ+JOJiP3MBodIfMPEfd1IDLHA8uOuqGWeQPeUh0nPcLlnJnJ6cw40Ejhg80KCSFN8uOVigWwAimo0FCGxNNYqAtTDipuK5l0JKUG5YKV jean@debian2 EOF chmod 600 ~/.ssh/authorized_keys ~~~ Attention, pour des raisons de sécurité les droits sur ''~/.ssh/authorized_keys'' doivent être 600 (Lecteur-écriture que pour le propriétaire) et le fichier doit appartenir à l'utilisateur concerné. ## Passe-phrase ** partie à rédiger ** Que se passe t-il si votre clef privée tombe entre de mauvaises mains ? Pour se prémunir, il est possible de chiffrer la clef SSH privée avec une passe-phrase. Et pour éviter de taper à chaque fois la passe-phrase, on utilise un "agent", aussi la passe-phrase ne sera demandée qu'une seule fois.