Se connecter avec une clé SSH à un serveur distant
Je cherchais à me connecter à un serveur distant sans avoir besoin de me connecter avec un mot de passe. J’avais fait la manipulation il y a  quelque mois, mais bien entendu je n’avais rien noté à l’époque. Voici donc en quelques lignes la méthode que j’ai adoptée.
Qu’est-ce qu’une clé ssh ?
Naïvement, je pensais qu’une clé ssh était associée à un utilisateur donné sur la machine cliente (celle à partir de laquelle on cherche à se connecter). En fait une clé ssh est un certificat avec une partie publique (que vous installerez sur la machine sur laquelle vous souhaitez vous connecter) et une partie privée que vous garderez précieusement sur votre machine cliente.
Si j’ai bien compris, lorsque vous vous connectez en ssh à une machine distante, le client ssh regarde tous les certificats dont vous disposez, et vérifie si la partie publique de ce certificat est connue par la machine distante pour l’utilisateur avec lequel vous vous connectez.
Ainsi, si en tapant la commande suivante :
ssh user@myserver.org
Le client ssh va vérifier si un des certificats ssh dont vous disposez sur votre machine pour votre utilisateur est disponible pour l’utilisateur user sur la machine distante. Si ce n’est pas le cas, il vous proposera l’authentification par mot de passe.
Bien entendu, ces comportements dépendent également de la configuration du serveur ssh sur la machine distante (/etc/ssh/sshd_config sur Ubuntu).
Créer la clé ssh
Note : vous remplacez bien sûr dans les exemples suivants user et myserver.org par le nom de l’utilisateur distant et de la machine distante.
Pour créer une clé SSH, nous allons utiliser la commande ssh-gen. Ouvrez votre terminal et tapez les commandes suivantes :
cd ~/.ssh ssh-keygen -t rsa
Le programme ssh-keygen va vous demander le nom du fichier (que vous pouvez nommer comme vous le souhaitez, par exemple user_rsa), ainsi qu’un mot de passe que vous prendrez soin de rendre suffisamment fort. ssh-keygen crée deux fichiers : le fichier user_rsa, clé privée à conserver précieusement, et le fichier user_rsa.pub, clé publique que nous allons déployer sur la machine distante.
Avant de déployer le certificat, ajoutons cette nouvelle clé en ajoutant dans le fichier ~/.ssh/config
 les lignes suivantes :
Host myserver Hostname myserver.org User myuser PreferredAuthentications publickey IdentityFile /Users/MyUser/.ssh/myuser_rsa
Une fois cette modification effectuée, vous pouvez vous connecter en tapant :
ssh myserver
Déployer le certificat sur la machine distante
Pour déployer votre certificat, vous devez l’ajouter au fichier authorized_keys du répertoire .ssh de l’utilisateur de la machine distante avec lequel vous souhaitez vous connecter ; vous procéderez comme suit :
scp ~/.ssh/user_rsa.pub remote_user@myserver.org:
N’oubliez pas les deux points derrière le nom de la machine distante. Connectez-vous ensuite avec l’utilisateur de la machine distante auquel vous souhaitez associer le certificat :
ssh user@myserver.org
Optionnel : si le répertoire .ssh n’existes pas sur le répertoire home de l’utilisateur, il faut le créer :
mkdir ~/.ssh
Nous allons ajouter la clé publique au fichier authorized_keys avec la commande cat, puis supprimer le fichier pub qui ne nous sert à rien, et restreindre la modification et la lecture du fichier authorized_keys au seul utilisateur courant :
cat ~/user_rsa.pub >> ~/.ssh/authorized_keys rm ~/user_rsa.pub chmod 600 ~/.ssh/authorized_keys
Déconnectez vous de la machine distante (exit), puis tapez :
ssh user@myserver.org
Le client ssh vous demandera peut-être le mot de passe associé au certificat et tapé lors de sa création. Si tout se passe bien, vous devriez être ensuite connecté à la machine distante !
Si ça ne se passe pas comme prévu
Un truc à connaître est l’option -v  de la commande ssh, qui permet d’avoir l’affichage à l’écran de l’ensemble des opérations de connexion à la machine distante.
via ArchiWiki
Répondre
Se joindre à la discussion ?Vous êtes libre de contribuer !