Le but ? Double
Sécuriser vos connexions SSH, l’utilisation d’un mot de passe étant sujette au cracking & simplifier vos accès. Un simple ssh [email protected]
suffit, plus de mot de passe à taper, l’idéal pour utiliser des scripts par exemple
Windows : http://www.it-connect.fr/cle-dauthentification-ssh-sous-windows/
Mac : c’est comme sous Linux, via le Terminal
Linux : lire la suite, c’est pas compliqué du tout mais je raconte ma life comme d’hab !
Sur votre PC, si vous n’avez pas encore de clé, générez-en une avec la commande
ssh-keygen -t rsa -b 8192
Le -b 8192
indique que je veux une clé de 8192 bits pour renforcer sa solidité. De mémoire par défaut (en tapant juste ssh-keygen -t rsa
) c’est du 1024 bits (?). Je suis un parano, prenez 2048 bits et ça ira très bien !
Je ne mets pas de passphrase, sinon il faudra la taper à chaque fois qu’on voudra utiliser cette clé et c’est à l’opposé de mon but.
[email protected] ~ $ ssh-keygen -t rsa -b 8192 Generating public/private rsa key pair. Enter file in which to save the key (/home/aerya/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/aerya/.ssh/id_rsa. Your public key has been saved in /home/aerya/.ssh/id_rsa.pub. The key fingerprint is: 52:8c:67:23:9d:f0:01:f1:zm:4e:97:9e:tw:fh:c4:a3 [email protected] The key's randomart image is: +--[ RSA 8192]----+ | .. . .. | | o.+.. o | | +o.= o . | | += o o | | .o . S . | | o o . o | | . . E o| | . . . . | | .=. . | +-----------------+
Vous avez maintenant une paire de clés publique (id_rsa.pub) & privée (id_rsa) dans /home/USER/.ssh
Il faut envoyer votre clé publique sur la machine distante afin qu’elle la conserve pour vous autoriser les accès ultérieurs. Si le port SSH de la machine distante est toujours 22 (donc inchangé), depuis votre PC local tapez
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
Vous devrez taper, une dernière fois, le pwd SSH de USER. Cette commande copie votre clé publique locale dans /home/USER/.ssh/authorized_keys
sur la machine distante.
Si le port SSH de la machine distante n’est plus 22 mais XXX, depuis votre PC local tapez
ssh-copy-id -i ~/.ssh/id_rsa.pub -p XXX [email protected]
Voici ce que ça donne concrètement quand je veux ajouter ma clé et me connecter à mon PC-TV via mon compte [email protected]
[email protected] ~ $ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys [email protected]'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '[email protected]'" and check to make sure that only the key(s) you wanted were added.
Avec en prime une petite erreur SSH : Agent admitted failure to sign using the key.
[email protected] ~ $ ssh [email protected] Agent admitted failure to sign using the key. [email protected]'s password:
Pas d’inquiétude, ça arrive de temps en temps. Pour la résoudre soit vous vous déco/reco (de votre machine locale) soit vous tapez la commande ssh add
qui va « forcer » le chargement local de votre nouvelle clé.
[email protected] ~ $ ssh-add Identity added: /home/aerya/.ssh/id_rsa (/home/aerya/.ssh/id_rsa)
Et là, tout fonctionne.
[email protected] ~ $ ssh [email protected] Welcome to Linux Mint 17.1 Rebecca (GNU/Linux 3.13.0-37-generic x86_64) Welcome to Linux Mint * Documentation: http://www.linuxmint.com Last login: Wed May 27 18:03:16 2015 from 192.168.1.113 [email protected] tv ~ $
Autre méthode pour envoyer votre clé publique si vous n’avez pas ssh-copy-id d’installé
cat ~/.ssh/my_key.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys"
Pour générer des clés différentes, par exemple une par serveur distant. Il suffit de le préciser lors de la création avec -f ~/.ssh/id_NOM
[email protected] ~ $ ssh-keygen -b 8192 -t rsa -f ~/.ssh/id_BouncerZNC Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/aerya/.ssh/id_BouncerZNC. Your public key has been saved in /home/aerya/.ssh/id_BouncerZNC.pub.
Et attention, l’utilisation d’une clé SSH avec le rejet des accès par pwd dans /etc/ssh/sshd_config
sur le serveur distant, vous empêchera de vous connecter depuis un autre PC que celui où se trouve votre clé privée. Donc si ça concerne un serveur « très important », prenez vos clés avec vous. Que ce soit sur une USB chiffrée, dans un smartphone ou même dans un cloud chiffré.
3 conseils pour votre sécurité via SSH :
- Changez le port SSH par défaut
sudo nano /etc/ssh/sshd_config
Ligne # What ports, IPs and protocols we listen for Port XXXX
(XXX à changer)
- Désactivez le rootlogin (merci Debian 8 qui empêche le rootlogin avec pwd et le force via clé o/)
sudo nano /etc/ssh/sshd_config
Lignes # Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
- Sécurisez votre clé en limitant son utilisation à une IP FIXE
Éditez le fichier de stockage de votre clé publique sur la machine distante et ajoutez-y l’IP depuis laquelle la connexion sera autorisée (IP locale, IP d’un VPS, dédié, d’un VPN s’il est privé…) avec from="123.456.789.10"
(votre IP
sudo nano /home/USER/.ssh/authorized_keys from="123.456.789.10" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA
Je ré-insiste sur une IP FIXE. Si vous ne pouvez plus vous connecter les hébergeurs proposent en général un accès en mode secours qui permet de booter via une distribution annexe et d’avoir accès aux fichiers de configuration.
Et retrouvez d’autres solutions de sécurité dans le tutoriel sur la sécurisation d’un serveur hébergeant un bouncer IRC.
Très bon tuto.
De mon côté j’ai ajouté un fail2ban histoire d’être un peu plus tranquille et j’ai aussi un petit script qui m’envoit un mail dès que qqun s’authentifie sur le serveur, on n’est jamais trop prudent.
Oui tout à fait, entre autres. Je l’ai mis dans le tutoriel sur l’installation d’un bouncer IRC. Mais ta remarque me fait penser qu’ajouter un lien dans ce sujet ne serait pas inutile :)
Merci !
Salut Aerya,
Je rajouterai pour les utilisateurs qui n’ont pas de ssh-copy-id :
cat ~/.ssh/id_rsa.pub | ssh $REMOTE « (cat > tmp.pubkey ; mkdir -p .ssh ; touch .ssh/authorized_keys ; sed -i.bak -e ‘/$(awk ‘{print $NF}’ ~/.ssh/id_rsa.pub)/d’ .ssh/authorized_keys; cat tmp.pubkey >> .ssh/authorized_keys; rm tmp.pubkey) »
où $REMOTE : [email protected] -p XXXX
Super blog :)
Merci ! (x2)