web-dev-qa-db-fra.com

compréhension de l'étape "Offrir une clé publique RSA" lors de l'initialisation de la connexion SSH

Lors de l'initialisation de la connexion SSHv2, il y a un message de débogage suivant:

debug1: Offering RSA public key: /home/user/.ssh/id_rsa

Ai-je raison de dire qu'aucune clé publique n'est envoyée au serveur? En plus, /home/user/.ssh/id_rsa est ma clé privée. Qu'est-ce que cela fait exactement Offering RSA public key message signifie?

21
Martin

Lorsque le client SSH affiche ce message, il essaie d'authentifier l'utilisateur sur le serveur ( userauth_pubkey dans sshconnect2.c ). Le client doit démontrer qu'il possède la clé privée correspondant à une clé publique autorisée sur le serveur. Le nom de fichier affiché dans le message de débogage est le nom du fichier de clé privée (par exemple passé en argument à -i ou comme la directive de configuration IdentityFile).

Au moment où ce message s'affiche, le client n'utilise pas la clé privée, uniquement la clé publique. Cependant, le client veut savoir que la clé privée est disponible, car si le serveur accepte d'utiliser cette clé publique, le client devra démontrer qu'il connaît la clé privée. Le client envoie un SSH_MSG_USERAUTH_REQUEST message au serveur avec la méthode publickey contenant la clé publique. Si le serveur accepte d'utiliser cette clé publique ("debug1: le serveur accepte la clé"), le client utilisera ensuite la clé privée pour signer un défi envoyé par le serveur dans un autre SSH_MSG_USERAUTH_REQUEST message (dans sign_and_send_pubkey - le have_sig l'octet passe de 0 ("dites-moi si vous aimez cette clé") à 1 ("voici une preuve que je suis moi, laissez-moi entrer")).

Je suppose que le client annonce la paire de clés qu'il utilise, en donnant la clé publique (bien sûr!). Mais en effet, la clé donnée avec ce message est une clé privée, dont je ne comprends pas bien pourquoi. J'ai essayé avec un ssh -vvv avec un serveur que j'utilise

debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Trying private key: /home/user/.ssh/id_dsa
debug3: no such identity: /home/user/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /home/user/.ssh/id_ecdsa
debug3: no such identity: /home/user/.ssh/id_ecdsa: No such file or directory
debug1: Offering ED25519 public key: /home/user/.ssh/id_ed25519
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-ed25519 blen 51

Comme j'ai 2 clés sur cet ordinateur: celle RSA et celle ECDSA, il semble que le serveur ait rejeté ma clé RSA. C'est ok, je n'ai pas fourni la clé RSA à ce serveur. Ensuite, il essaie de trouver un DSA et une clé ECDSA, mais je n'en ai aucun, donc "aucune telle identité" est compréhensible. Ensuite, je possède une clé ED25519, et il essaie celle-ci. Et cela se passe bien, puisque j'ai enregistré cette paire de clés sur ce serveur. Notez que il accepte ma clé publique maintenant!

Ensuite, le protocole continue de s'exécuter à travers un défi où le serveur sait maintenant quelle clé publique utiliser pour chiffrer le défi, et le client (ma machine) sait quelle clé privée utiliser pour ce défi.

3
Leath