SSH "Authentification par Clef"

Bonsoir,

Les spécialistes préconisent pour des raisons de sécurité, une connexion SSH sur SERVEUR par “Authentification par Clef” plutôt que par “Mot de Passe”.

J’ai lu de nombreux posts sur le sujet pour essayer de trouver des réponses claires à mes interrogations (trop évidentes peut être ?)

Il semblerait (mais je me trompe peut être) que l’utilisateur sur le CLIENT soit “obligé ?” de se connecter au moins UNE fois par “Mot de Passe” sur le SERVEUR, afin d’effectuer les opérations nécessaires à l’enregistrement de sa clé. Mais bon, à confirmer ?

Mes questions :

Q1) Concernant le SERVEUR avec l’unique possibilité imposée d’une connexion par “clef”, le réflexe de prime abord serait de dire que pour TOUTE tentative de connexion à venir (via /etc/ssh/sshd_config):

  • “PubkeyAuthentication=oui”
  • “PasswordAuthentication=non !” (y compris pour la PREMIÈRE connexion de l’utilisateur à partir du CLIENT)

Est-ce exact ?

Dans ce cas, c’est à la charge de l’utilisateur “CLIENT” d’arriver à se connecter sur le SERVEUR en appliquant la méthode de MEO qui va bien (rappelée pour info plus bas).

Mais pour ma part, ayant eu ce premier réflexe, j’ai dû finalement me résigner à d’abord passer “PasswordAuthentication=oui” pour que cela marche (i.e. transfert de clef …)

Sûrement une fausse manipe ou une omission? :frowning:
Bien entendu, une fois la manipe réalisée j’ai repassé "PasswordAuthentication=non !"
Cette manipe si elle m’a permis d’aboutir m’étonne, car il est clair que pour moi utilisateur “CLIENT”, je ne suis pas censé avoir de droits “root” sur le SERVEUR (même si là, c’est le cas …).

Q2) Sinon peut être est il inutile de repasser “PasswordAuthentication=non !” car “PubkeyAuthentication=oui” serait prioritaire sur un “PasswordAuthentication=oui” (ce dont je doute …) ?
En tout cas il est étonnant d’avoir les 2 autorisations qui perdurent, car en cas de problème avec la clef (e.g. “phrase de passe” erronée rentrée intentionnellement ou non), si on bascule automatiquement sur le mode de connexion par “Mot de Passe”, c’est exactement le contraire de l’objectif de départ.

Q3) Le fait de pouvoir appliquer les droits adhoc sur les Fichiers/Répertoires (cf. plus bas) ne pose pas de problème à l’utilisateur sur le CLIENT mais sur le SERVEUR en revanche, il n’est pas censé s’y être encore connecté pour le faire ; sauf peut être si une PREMIERE connexion par “Mot de Passe” lui a été autorisée grâce à un “PasswordAuthentication=oui” fixé momentanéement sur le SERVEUR (Ce que j’ai fait en fait …) ou tout autre “stratagème”

Et dans ce cas, qui prévient l’administrateur du SERVEUR de repasser en “PasswordAuthentication=non” ?
Bien sûr celui-ci dispose de moyens de le savoir sans être explicitement “informé” mais bon, je ne suis pas tout seul sur le réseau et si il bascule le SERVEUR en “PasswordAuthentication=non”, le problème va immanquablement se poser pour un nouvel utilisateur qui à son tout voudra initialiser une connexion SSH en mode “Authentification par Clef”.
C’est donc le “Serpent qui se mord la queue” et il y a sûrement une réponse plus appropriée à cette question qui me préoccupe.

Q4) Quelle est la différence entre le “PasswordAuthentication” du “/etc/ssh/sshd_config” sur le SERVEUR et le “PasswordAuthentication” du “/etc/ssh/ssh_config” sur le CLIENT ?
Cela aurait-il un rapport avec la question qui me préoccupe ?

Voilà, merci par avance pour votre attention à la lecture de ce long post ainsi que pour les éléments de réponses que vous pourrez m’apporter.

=====================================
Procédure mise en oeuvre (pour info)

Installation “Debian 7 / SSH Serveur”

A) Machine0=ServCalc

  • administrée par “root0”
  • utilisateur & MdP : “smecaflux/passflux”

Fichier configuration SSH du “Serveur” : /etc/ssh/sshd_config

  • PubkeyAuthentication : “yes” (admin0 IMPOSE la connexion par clef)
  • PasswordAuthentication :
  • “no” : admin0 IMPOSE la connexion par clef (et donc Authentification par MdP refusée ???)
  • ou bien “yes” ??? : admin0 autorise au moins pour la PREMIERE CONNEXION d’un utilisateur afin que celui-ci soit en mesure d’effectuer son TRANSFERT de clef ???)

B) Machine1=WrkStat

  • administrée par “root1”
  • utilisateur & MdP : “smecaflux/passflux”

Fichier configuration SSH du “Client” : /etc/ssh/ssh_config

  • PasswordAuthentication :
  • “no” ??? admin1 INTERDIT la connexion “MdP” sur TOUT serveur (la seule justement autorisée par admin0 sur “SerCalc” étant une connexion par “clé”)
  • “yes” ??? À priori admin1 de “WrkStat” ne connait pas la politique mise en oeuvre par admin0 de “SerCalc”
  1. Génération de la clé : ssh-keygen -t dsa

  2. Droits des Répertoires et Fichiers

  • sur le CLIENT :
    chmod 755 $HOME
    chmod 700 $HOME/.ssh
    chmod 600 $HOME/.ssh/*

  • sur le SERVEUR :
    chmod 755 $HOME
    chmod 700 $HOME/.ssh
    chmod 600 $HOME/.ssh/*

NB. ??? Sur le SERVEUR cela suppose que l’utilisateur “smecaflux” se soit DEJÀ connecté au moins “1 fois” avec “Mot de Passe” pour appliquer les droits
(PAS par authentification par clé puisque c’est justement ce que l’on cherche à faire …) ???

3)Transfert clé publique “Station => Serveur”

3a)ssh-copy-id -i ~/.ssh/id_dsa.pub smecaflux@ServCalc
ou
3b) cat ~/.ssh/id_dsa.pub | ssh ServCalc "cat - >> ~/.ssh/authorized_keys"
ou
3c)

  • scp ~/.ssh/id_dsa.pub ServCalc:/tmp
  • smecaflux@ServCalc password ? := passflux (! le MdP que l’on ne devrait justement “jamais” / ou “plus” rentrer puisque connexion par clé )
  • ssh smecaflux@ServCalc
  • cat /tmp/id_dsa.pub >> ~/.ssh/authorized_keys
  • rm /tmp/id_dsa.pub

Salut,

Je n’ai certes pas tout lu, loin sans faut, voici un tuto, pédagogique à mon goût, qui devrait répondre à bon nombre de tes questions/angoisses.

openSSH/ssh_introduction.html :wink:


Nota : Qu’est-ce que le BBCode?

Pas nécessairement.
Si tu as un accès physique au serveur, tu peux très bien y installer tes clés publiques directement (par exemple en montant une clé USB, …).
Si par contre tu n’as pas d’accès physique mais seulement un accès réseau au serveur, il est évident qu’il te faut un moyen d’installer tes clés publiques sur le serveur. Et vu que tu n’as pas encore installé lesdites clés sur ledit serveur, les seules solutions sont soit une connexion par mot de passe, soit de faire installer tes clés par l’admin (voir plus bas).

[quote=“tsd2sobolev”]Q1) Concernant le SERVEUR avec l’unique possibilité imposée d’une connexion par “clef”, le réflexe de prime abord serait de dire que pour TOUTE tentative de connexion à venir (via /etc/ssh/sshd_config):

  • “PubkeyAuthentication=oui”
  • “PasswordAuthentication=non !” (y compris pour la PREMIÈRE connexion de l’utilisateur à partir du CLIENT)[/quote]
    Déjà répondu ci-dessus : ça dépend de tes possibilités d’accès au serveur.

[quote=“tsd2sobolev”]Q2) Sinon peut être est il inutile de repasser “PasswordAuthentication=non !” car “PubkeyAuthentication=oui” serait prioritaire sur un “PasswordAuthentication=oui” (ce dont je doute …) ?
En tout cas il est étonnant d’avoir les 2 autorisations qui perdurent, car en cas de problème avec la clef (e.g. “phrase de passe” erronée rentrée intentionnellement ou non), si on bascule automatiquement sur le mode de connexion par “Mot de Passe”, c’est exactement le contraire de l’objectif de départ.[/quote]
Tu sembles avoir très bien compris que si les deux méthodes sont actives, tu peux utiliser n’importe laquelle des deux pour te connecter. Partant de là, si tu veux pouvoir te connecter uniquement avec tes clés asymétriques mais pas par mot de passe, il faut désactiver l’authentification par mot de passe.

[quote=“tsd2sobolev”]Q3) Le fait de pouvoir appliquer les droits adhoc sur les Fichiers/Répertoires (cf. plus bas) ne pose pas de problème à l’utilisateur sur le CLIENT mais sur le SERVEUR en revanche, il n’est pas censé s’y être encore connecté pour le faire ; sauf peut être si une PREMIERE connexion par “Mot de Passe” lui a été autorisée grâce à un “PasswordAuthentication=oui” fixé momentanéement sur le SERVEUR (Ce que j’ai fait en fait …) ou tout autre “stratagème”

Et dans ce cas, qui prévient l’administrateur du SERVEUR de repasser en “PasswordAuthentication=non” ?
Bien sûr celui-ci dispose de moyens de le savoir sans être explicitement “informé” mais bon, je ne suis pas tout seul sur le réseau et si il bascule le SERVEUR en “PasswordAuthentication=non”, le problème va immanquablement se poser pour un nouvel utilisateur qui à son tout voudra initialiser une connexion SSH en mode “Authentification par Clef”.
C’est donc le “Serpent qui se mord la queue” et il y a sûrement une réponse plus appropriée à cette question qui me préoccupe.[/quote]
Si l’administrateur ne permet que des connexions par clés asymétriques, charge à lui de fournir une méthode à ses utilisateurs pour mettre en place une clé publique initiale. Ça peut être via une interface web sécurisée, en envoyant la clé publique à l’admin par email pour qu’il l’installe manuellement, que sais-je encore… Une chose est certaine c’est que l’admin ne va pas changer la configuration globale du serveur juste le temps qu’un nouvel utilisateur mette en place sa clé publique.

[quote=“tsd2sobolev”]Q4) Quelle est la différence entre le “PasswordAuthentication” du “/etc/ssh/sshd_config” sur le SERVEUR et le “PasswordAuthentication” du “/etc/ssh/ssh_config” sur le CLIENT ?
Cela aurait-il un rapport avec la question qui me préoccupe ?[/quote]
Peu de rapport. Le client propose, le serveur dispose. Autrement dit, tout ce que le client peut faire c’est ignorer certaines méthodes d’authentification que le serveur accepte, mais le client ne pourra jamais forcer le serveur à accepter une méthode qui est interdite dans la config du serveur.

MERCI pour ces réponses point par point à mes questions sur ce problème qui aurait pu s’intituler :

Comment se connecter à une machine par SSH lorsque pour les 2 modes d’accès en place, l’un est définitivement et intentionnellement “fermé” (i.e. par “Mot de Passe”) et l’autre le seul autorisé en définitive, n’est pas encore “Ouvert” (i.e. “Authentification par Clef”).

Mais bon, il me fallait bien un peu de prose pour traduire mon angoisse relative, face à ce problème, qui dans le fond, aura effectivement été perçu (perçu sans “e” :wink: )

Donc pour résumer :

  1. Pour le SERVEUR, la règle imposée pour TOUS est :
  • PubkeyAuthentication:=oui (et c’est la SEULE possible)
  • PasswordAuthentication:=non, non et non ! (surtout, on ne permute pas et on laisse encore moins à “oui”)
  1. Pour le(s) CLIENT(S)
  • Envoi des clés publiques à l’admin SERVEUR ; pour lui, c’est l’huile de coude pour mettre en place les infos dans les endroits qui vont bien et faire ce qu’il y a à faire au niveau des droits “ugo” pour les fichiers/répertoires (car rappelons le, l’utilisateur, à distance, n’a pas encore accès à son “Home” sur serveur)

NB. La solution consistant à se déplacer pour se connecter physiquement sur le serveur pour le transfert d’infos (par clef USB, etc…) n’a intentionnellement pas été envisagée pour cette problématique à “distance”

Oui enfin “huile de coude” est un bien grand mot. Il te (l’admin) suffit de faire un petit script pour installer automatiquement une clé publique pour un utilisateur donné, comme ça tu n’as qu’une seule commande à lancer (un bon [strike]développeur[/strike] admin est un admin fainéant !).

On est d’accord :slightly_smiling:) !