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 user@ip 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.

    aerya@aerya-desktop ~ $ 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 aerya@aerya-desktop
    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 USER@IP

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 USER@IP

 

Voici ce que ça donne concrètement quand je veux ajouter ma clé et me connecter à mon PC-TV via mon compte tv@192.168.1.102

    aerya@aerya-desktop ~ $ ssh-copy-id -i ~/.ssh/id_rsa.pub tv@192.168.1.102
    /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
    tv@192.168.1.102's password:


    Number of key(s) added: 1

    Now try logging into the machine, with:   "ssh 'tv@192.168.1.102'"
    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.

    aerya@aerya-desktop ~ $ ssh tv@192.168.1.102
    Agent admitted failure to sign using the key.
    tv@192.168.1.102'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é.

    aerya@aerya-desktop ~ $ ssh-add
    Identity added: /home/aerya/.ssh/id_rsa (/home/aerya/.ssh/id_rsa)

Et là, tout fonctionne.

    aerya@aerya-desktop ~ $ ssh tv@192.168.1.102
    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
    tv@ 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 user@serveur.tld "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

    aerya@aerya-desktop ~ $ 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.

 

(620 vues)

4
Poster un Commentaire

2 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
  Subscribe  
Me notifier des
Abeatbowl

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

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 : user@ip -p XXXX

Super blog :)