web-dev-qa-db-fra.com

Connexion SSH basée sur une clé nécessitant à la fois la clé ET le mot de passe

Mon problème est le suivant: j'ai développé avec succès la connexion SSH basée sur RSA Key à partir du système. Lorsqu'un client se connecte pour la première fois, renseignez-vous sur la clé privée et le mot de passe composé également, ce qui fonctionne bien. Lors de la deuxième connexion, ssh ne demande pas de clé privée ni de mot de passe, mais directement sur le serveur.

Côté client, utilisez Ubuntu 16.04 et personnalisez Ubuntu à bord.

première connexion avec la commande ci-dessous:

ssh -i ~/.ssh/id_rsa user@board_ip // fonctionne bien

Deuxième fois:

ssh user@board_ip // ne jamais demander le mot de passe et la clé publique - ( problème

première fois:

ssh user@board_ip // impossible de se connecter sans clé - fonctionne correctement

Selon ma compréhension, j'ai commis une erreur dans le fichier sshd_config du tableau. J'ai joué avec les paramètres ci-dessous, mais j'ai échoué tout le temps.

StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#PasswordAuthentication yes                                            
PermitEmptyPasswords no

L'exigence du projet est une connexion sécurisée, principalement sur ssh. Pour renforcer la sécurité de la connexion par mot de passe SSH, nous avons opté pour une connexion par clé. Comme expliqué ci-dessus après modification de toute la configuration. La connexion SSH requiert également une clé privée et un mot de passe. Après la déconnexion, puis une nouvelle fois, ssh n'a pas besoin de clé ni de mot de passe, les exigences du projet nécessitent une clé et un mot de passe à chaque fois.

5
Tejas Virpariya

Il existe deux méthodes pour configurer ssh afin d'exiger à la fois une clé publique et un mot de passe ou une phrase secrète.

La différence entre le mot de passe et la phrase secrète:

Le mot de passe dans ce contexte est le mot de passe attribué à l'utilisateur sur l'ordinateur serveur (le tableau). Si le forum n'a qu'un seul compte utilisateur, il n'aura qu'un seul mot de passe. Si le forum a plusieurs comptes d'utilisateurs, ils doivent avoir leur mot de passe unique.

La phrase secrète est liée à la clé privée de l'ordinateur client (local) et non à l'ordinateur du serveur distant (carte). Ainsi, si vous utilisez ssh depuis deux ordinateurs clients différents de périphériques, vous devrez créer une phrase secrète pour les clés privées stockées sur chaque ordinateur local. De même, si deux utilisateurs différents ont besoin de ssh sur le serveur (carte) depuis leurs propres ordinateurs locaux respectifs, ils auront besoin de leurs propres paires de clés privé-public et de leur phrase secrète pour déverrouiller leurs clés privées respectives.

Par exemple, supposons que vous et moi ayons besoin de ssh sur l’ordinateur serveur de sauvegarde (le tableau) à partir de nos propres ordinateurs portables. Vous aurez votre propre clé privée et une phrase secrète pour cette clé privée. J'aurai ma propre clé privée et sa phrase secrète. Le résultat de cet arrangement est que je peux changer la phrase secrète de ma clé privée à tout moment sans vous le dire, ou changer quoi que ce soit sur l'ordinateur du serveur (le tableau). Je peux même supprimer la phrase secrète de ma clé privée sans vous le dire.

L'autre scénario est le suivant: si j'ai plusieurs serveurs à ssh et si j'utilise la même clé privée pour m'authentifier auprès de tous les serveurs, j'aurai besoin de la même phrase secrète pour accéder à ssh sur tous les serveurs avec lesquels je travaille, votre conseil.

Méthode 1. Clé publique avec phrase secrète

Référence: https://help.ubuntu.com/community/SSH/OpenSSH/Keys

Étape 1. Ajoutez une phrase secrète à la clé publique-privée existante pour chaque combinaison client/utilisateur

Pour chaque utilisateur sur chaque ordinateur ou périphérique client, utilisez la commande suivante pour générer une phrase secrète pour la paire de clés publique-privée existante:

ssh-keygen -p

Vous serez invité à indiquer l'emplacement où conserver les fichiers. Appuyez sur Entrée pour accepter l'emplacement par défaut.

Si vous avez déjà un mot de passe composé, il vous sera demandé de saisir le mot de passe existant. Dans ce cas, vous avez déjà effectué cette étape. presse Ctrl+C pour arrêter le processus.

Ensuite, vous serez invité à entrer une nouvelle phrase secrète. N'appuyez pas sur Entrée! Entrez un mot de passe complexe, long et difficile à deviner, facile à mémoriser. Il vous sera demandé de ressaisir la phrase secrète.

Si vous ne disposez pas d'une paire de clés publique-privée existante, utilisez la commande suivante pour la générer. Vous serez invité à ajouter un mot de passe si vous en avez besoin:

ssh-keygen -t rsa

Chaque fois que vous essayez de vous connecter au serveur ssh, il vous sera demandé de saisir cette phrase secrète. Cela peut être différent pour le mot de passe utilisateur du serveur ssh. Chaque utilisateur peut avoir sa propre phrase secrète. Si un utilisateur doit se connecter à partir de différents clients (ordinateur portable, téléphone, etc.), il devra répéter ce processus pour chaque client. Elle peut choisir un mot de passe différent pour différents clients.

Étape 2. Copiez la clé publique sur le serveur uniquement si la clé est nouvelle

Dans votre ordinateur client, entrez:

ssh-copy-id -i ~/.ssh/id_rsa user@board_ip

Il vous demandera le mot de passe de l'utilisateur sur le serveur distant. N'oubliez pas que la connexion par mot de passe doit être activée pour que cela fonctionne.

Répétez l'opération pour tous les utilisateurs et tous les périphériques clients.

Étape 3. Vérifiez si cela fonctionne

Essayez de vous connecter au serveur en entrant:

ssh user@board_ip 

Si tout se passe bien, vous serez invité à saisir la phrase secrète créée à l'étape 2. Il ne s'agit pas du mot de passe utilisateur qui vous a été demandé à l'étape 3.

Si vous voyez l'invite à entrer le mot de passe de l'utilisateur, quelque chose ne va pas. Ne passez pas à l'étape suivante tant que cela ne fonctionne pas.

Étape 4. Désactivez la connexion par mot de passe

Une fois que chaque utilisateur et ses machines clientes respectives ont leurs propres paires de clés public-privé et les phrases secrètes respectives de leur choix, vous n'avez plus besoin de la connexion avec mot de passe. Il est préférable de désactiver cette méthode. Si cette option est activée, toute personne ne possédant pas la paire de clés publique-privée pourra essayer de deviner le mot de passe de l'utilisateur @ board-ip.

Dans le serveur ssh, le forum, éditez le fichier /etc/ssh/sshd_config et changez:

#PasswordAuthentication yes

lire:

PasswordAuthentication no

Notez que le # ne figure pas dans la deuxième ligne et le yes est maintenant no.

Redémarrez le service SSH sur le serveur en:

Sudo service ssh restart

Si cela ne fonctionne pas, redémarrez le forum.

C'est fait. La phrase secrète est probablement mise en cache dans le client par Gnome-Keyring jusqu'à ce que l'utilisateur se déconnecte de l'ordinateur local. Ainsi, la phrase de phase n'est demandée qu'une fois par session.

Ce qui vient ensuite est une autre alternative. Vous devez faire 1 ou 2.

Méthode 2. Clé publique et mot de passe utilisateur requis

Référence: https://security.stackexchange.com/questions/17931/possible-to-use-both-private-key-and-password-authentication-for-ssh-login

Étape 1. Supprimez la phrase secrète de la clé privée, le cas échéant, pour chaque combinaison client/utilisateur

Pour chaque utilisateur sur chaque ordinateur client ou périphérique, utilisez la commande suivante pour générer la paire de clés publique-privée:

ssh-keygen -p

Vous serez invité à indiquer l'emplacement où conserver les fichiers. Appuyez sur Entrée pour accepter l'emplacement par défaut.

Si vous avez une phrase secrète existante, il vous sera demandé de la saisir. Si vous ne recevez pas d'invite pour la phrase de passe existante, vous avez terminé. presse Ctrl+C pour arrêter le processus.

Sinon, entrez le mot de passe existant et continuez.

Ensuite, vous serez invité à entrer une phrase secrète. Hit Enter deux fois pour supprimer la phrase secrète existante de la clé privée.

Si vous ne disposez pas d'une paire de clés publique-privée existante, utilisez la commande suivante pour la générer. Vous serez invité à ajouter un mot de passe si vous en avez besoin:

ssh-keygen -t rsa

Si un utilisateur doit se connecter à partir de différents clients (ordinateur portable, téléphone, etc.), il devra répéter ce processus pour chaque client.

Étape 2. Copiez la clé publique sur le serveur uniquement si la clé est nouvelle

Dans votre ordinateur client, entrez:

ssh-copy-id -i ~/.ssh/id_rsa user@board_ip

Il vous demandera le mot de passe de l'utilisateur sur le serveur distant. N'oubliez pas que la connexion par mot de passe doit être activée pour que cela fonctionne.

Répétez l'opération pour tous les utilisateurs et tous les périphériques clients.

Étape 3. Vérifiez si des clés publiques sont utilisées

Essayez de vous connecter au serveur en entrant:

ssh user@board_ip 

Si tout se passe bien, vous ne serez pas invité à entrer un mot de passe ou une phrase secrète. Ceci est normal. Cela montre que la clé publique est correctement installée sur le serveur ssh (la carte) et que cela fonctionne. Nous allons modifier le paramètre pour qu'il demande à nouveau le mot de passe à l'étape suivante.

Étape 4. Configuration à la fois pour la clé publique et le mot de passe

Connectez-vous au serveur ssh (le forum) et éditez le fichier /etc/ssh/sshd_config. Ajoutez la ligne suivante dans le fichier:

AuthenticationMethods publickey,password

Avertissement: Assurez-vous que le PasswordAuthentication ressemble à:

#PasswordAuthentication yes

Ceci est le comportement par défaut. Vous pouvez choisir de conserver ou de supprimer le # au début. Toutefois, si ce paramètre a pour valeur no avec la ligne que vous venez d'ajouter, personne ne pourra se connecter au serveur à l'aide de ssh. Si vous êtes verrouillé, vous devrez accéder physiquement au serveur distant, le connecter au clavier, au moniteur, etc., vous connecter localement et modifier ce fichier pour résoudre le problème.

Fin de l'avertissement

Redémarrez le service SSH sur le serveur en:

Sudo service ssh restart

Si cela ne fonctionne pas, redémarrez le forum.

Étape 5. Test de rodage

Recherchez un nouvel ordinateur ou connectez-vous à l'ordinateur client à l'aide d'un nouveau nom d'utilisateur, par exemple utilisateur2. Cet utilisateur ne doit pas avoir de paires de clés public-privé dans son dossier /home/$USER/.ssh/. Nous allons prétendre que l'utilisateur2 est le pirate informatique qui a en quelque sorte découvert le mot de passe de l'utilisateur @ board_ip et tente de ssh dans ce système.

Entrez en tant qu'utilisateur 2, à partir de l'ordinateur client:

ssh user@board_ip

Si vous pouvez vous connecter avec juste le mot de passe, cela ne fonctionnera pas. Quiconque a le mot de passe ou peut le deviner peut se connecter au forum. Ils n'ont pas besoin de la clé.

Si vous obtenez un permission denied et que la connexion échoue, la double authentification de la clé publique et du mot de passe fonctionne.

J'espère que cela t'aides

7
user68186

Le problème est que ~/.ssh/id_rsa est le répertoire par défaut pour une clé publique SSH dans Ubuntu. Par conséquent, il n'est pas nécessaire d'inclure -i ~/.ssh/id_rsa dans votre commande SSH après l'échange de clé pour utiliser la clé id_rsa.

Pour éviter ce problème, créez la paire de clés SSH avec un nom différent. Elle ne sera utilisée que si vous la spécifiez avec l'option -i.

Exemple:
Si vous créez la clé avec le nom user_ssh_rsa dans le répertoire de base de l'utilisateur:

ssh-keygen -t rsa -f ~/.ssh/user_ssh_rsa

Ensuite, échangez la clé avec le serveur distant et entrez le mot de passe de l'utilisateur sur le système distant lorsque vous y êtes invité:

ssh-copy-id -i ~/.ssh/user_ssh_rsa user@board_ip

Se connecter avec:

ssh -i ~/.ssh/user_ssh_rsa user@board_ip

Va se connecter sans demander de mot de passe, car il utilise la clé nouvellement créée.

En utilisant:

ssh -user@board_ip

Invitera le mot de passe, car la paire de clés n'est pas trouvée automatiquement.
Cela dépend de la suppression de la clé déjà partagée à ~/.ssh/id_rsa

0
Arronical