Accès SSH par clé (Win, Mac, Nix) + sécurisation

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.

 

(936 vues)
S’abonner
Notifier de
4 Commentaires
Inline Feedbacks
Voir tout
Abeatbowl
Invité
20/09/2015 21:54

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.

Zabie
Invité
14/11/2015 09:19

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 :)