Lors de la spécification explicite du fichier d'identité à ssh:
ssh -i ./id_rsa ...
J'ai ces lignes dans la trace de débogage ssh:
debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
Cela signifie-t-il que ssh-generated id_rsa
contient également un exposant RSA public? id_rsa
le format semble être assez explicite car il contient la clé privée avec son bloc "BEGIN PRIVATE KEY", donc "offrir la clé publique" doit signifier autre chose que "envoyer la clé publique au serveur".
ÉDITER:
Pour clarifier, je veux savoir ce qui se passe exactement derrière la ligne "offrant la clé publique". Si le client détient plusieurs clés, elles seront toutes proposées au serveur une par une.
Réponses:
pour vous connecter à un serveur SSH et vous authentifier avec votre paire de clés publique / privée, vous devez d'abord partager votre clé publique avec le serveur.
cela se fait en copiant la clé publique de votre clé privée sur le serveur, et en l'ajoutant
~/ssh/authorized_keys
soit par copier / coller, en copiantid_rsa.pub
sur~/.ssh/authorized_keys
sur le serveur ou aveccat id_rsa.pub >> ~/.ssh/authorized_keys
, en l'ajoutant à la liste.lorsque vous vous connectez, le serveur utilise votre clé publique pour signer un défi, et votre client utilise votre clé privée
id_rsa
pour déchiffrer le défi, le rechiffrer avec la publique du serveurhost key
et le renvoyer.l'hôte vérifie que vous avez correctement déchiffré le défi, en déchiffrant votre réponse avec sa clé privée, et le client / hôte établit une connexion chiffrée, basée sur les données partagées, pas sur vos clés publiques / privées.
à AUCUN POINT dans l'échange est votre clé privée, ou la clé privée de l'hôte échangée ou révélée. votre clé publique EST stockée sur le serveur, mais c'est pourquoi il s'agit d'une clé PUBLIQUE.
la source
ssh -i keyname
vous dites à votre client ssh exactement quelle clé vous prévoyez d'utiliser pour vous connecter au serveur. si vous avez une douzaine de clés dans~/.ssh/
votre client, il ne parcourra PAS chaque clé. il recherchera~/.ssh/id_rsa
,~/.ssh/id_dsa
éventuellement , quelques autres noms de fichiers qui sont codés dans le client, ou quelle clé est spécifiée pour cet hôte dans~/.ssh/config
... short story short; votre client ne fournit / aucune clé / au serveur.~/.ssh/authorized_keys
l'hôte sait ce qu'est le défi et ce qu'il cherche car une fois qu'une clé publique la déverrouille, elle sait utiliser cette clé.La cryptographie à clé publique / privée est basée sur un système très simple:
Vous disposez d'une clé publique capable de faire un chiffrement unidirectionnel et d'une clé privée qui est capable de déchiffrer. La clé publique peut alors être donnée à tout le monde dans le monde, et personne ne pourra décrypter vos données cryptées, bien qu'ils puissent crypter les données que vous pouvez décrypter avec votre clé privée.
La réponse à votre question est donc "votre clé publique".
la source
Je ne pense pas qu'il devrait réellement envoyer la clé publique ou privée pour le moment. Un chiffrement doit être effectué par le client à l'aide de la clé privée sur un texte en clair déjà connu du serveur. L'hôte peut déchiffrer ce message à l'aide de la clé publique, sachant que le seul qui aurait pu le chiffrer correctement est un client qui détient la clé privée correspondante, authentifiant ainsi le client.
Je crois que cela dit
Offering public key: ./id_rsa
parce qu'il utilise la clé privée (stockée dans./id_rsa
) pour effectuer un cryptage sur le texte brut connu du serveur, puis le serveur utilisera la clé publique pour décrypter ce texte chiffré et confirmer qu'il correspond au texte en clair. Le fichier de clé publique./id_rsa.pub
ne devrait jamais être nécessaire au client après la génération de clé initiale. Ceci n'est utilisé que par le serveur pour le déchiffrement.la source