Où sont mes clés SSH privées / publiques sous UNIX?

17

Je commence à comprendre comment RSA et les systèmes de clé publique / privée fonctionnent, et je me demandais où ma clé SSH privée et publique est stockée. Lorsque je vais dans mon répertoire personnel et que je parcours mon répertoire .ssh (cd .ssh), je ne vois que le fichier "known_hosts", qui contient, je suppose, les clés publiques des différents serveurs SSH distants que je connais.

Où puis-je trouver ces clés? Au fait, je ne me souviens même pas de les avoir créés, mais comme j'ai déjà établi des connexions ssh auparavant, elles doivent être quelque part.

J'utilise OpenSSH_5.2p1 avec MAC OS 10.6.

Merci!

Michael Eilers Smith
la source

Réponses:

15

~/.ssh/id_rsaet ~/id_rsa.pubgénéralement. Mais il ne s'ensuit pas que ssh doit créer une paire et les enregistrer: ssh utilise essentiellement le protocole SSL, qui établit une clé de session en utilisant l' algorithme d'échange de clés Diffie / Hellman ou une variante. Cela signifie que l'établissement de liaison établissant la connexion génère une clé de session et la supprime lorsque la session est terminée.

Lisez l'algorithme, c'est assez astucieux: en utilisant des mathématiques assez simples, il établit une clé connue aux deux extrémités de la connexion sans jamais envoyer la clé sur la connexion.

Charlie Martin
la source
Est-ce à dire que si on ne m'a jamais demandé de générer des clés SSH, RSA n'a jamais été utilisé? En d'autres termes, qu'un algorithme asymétrique a été utilisé pour partager la clé de session, mais que les clés publiques / privées temporaires pour la connexion n'ont pas été stockées sur mon ordinateur?
C'est exactement ça. En fait, le chiffrement est symétrique - les algorithmes asymétriques ne sont pas bien adaptés à la diffusion en continu. Le Diffie-Hellman est utilisé pour générer une clé de session pour le chiffrement symétrique. Si vous utilisez plutôt une paire de clés publique / privée, elles sont utilisées dans une autre poignée de main pour créer une clé de session pour l'algorithme symétrique.
Charlie Martin
@mieli: Non. Ils n'ont jamais été créés en premier lieu. publickeyn'est qu'une méthode d'authentification possible parmi plusieurs; si vous vous êtes simplement connecté avec passwordou keyboard-interactive, le mot de passe lui-même a été envoyé. (Remarque: ne confondez pas la clé utilisateur, la clé hôte et les clés de session.)
user1686
@grawity, nous sommes généralement d'accord ici, mais soyons un peu prudents. L'échange de clés Diffie-Hellman est lié à RSA et à d'autres algorithmes de chiffrement asymétriques et est essentiellement asymétrique, car les deux côtés de l'échange ont leur propre "moitié" de l'accord final. Ils n'ont deux parties de la clé, et la clé finale et le processus exact de construire sont mis au rebut à la fin de la session. Ce ne sont cependant pas les parties publiques et privées d'une paire RSA.
Charlie Martin
4

Vos clés ssh personnelles publiques et privées sont normalement stockées dans:

$HOME/.ssh/id_dsa     (private key)
$HOME/.ssh/id_dsa.pub (public key)

Ou ils pourraient l'être id_rsaet id_rsa.pubsi vous avez créé des clés RSA plutôt que des clés DSA (OpenSSH prend en charge les deux formulaires).

Mais le fait que vous ayez déjà établi des connexions ssh n'implique pas que vous ayez des clés ssh. Si la sshcommande ne trouve pas votre clé personnelle, elle vous demandera un mot de passe pour le système distant. C'est moins sûr que d'utiliser des clés.

Vous devez normalement créer votre clé privée ssh avec une phrase secrète. Si vous le créez sans mot de passe, quelqu'un qui obtient une copie de votre clé privée peut vous emprunter l'identité. ssh-agentvous permet d'utiliser une clé avec une phrase secrète sans avoir à ressaisir votre phrase secrète chaque fois que vous l'utilisez.

Keith Thompson
la source
2

Si vous ne l' avez pas créé une paire de clés, vous ne probablement pas avoir un.

Le trafic SSH2 est chiffré avec une clé de session symétrique établie à l'aide d'algorithmes DH, ECDH ou d'échange de clés GSSAPI. Ni la clé hôte ni la clé utilisateur ne sont utilisées pour crypter les données - leur seul but est l' authentification .

Rappelez-vous maintenant que SSH prend en charge plusieurs méthodes d'authentification: en outre publickey, presque tous les serveurs acceptent le simple passwordet / ou keyboard-interactive, dans lequel aucune génération ou utilisation de clé n'a lieu - le mot de passe est simplement envoyé au serveur distant pour vérification.

En d'autres termes, "puisque j'ai déjà établi des connexions ssh auparavant, elles doivent être quelque part" est incorrect - la paire de clés utilisateur n'est pas nécessaire pour établir des connexions.


Si vous avez fait créer une paire de clés, il sera probablement en ~/.ssh/id_*- par exemple, id_rsapour la valeur par défaut paire de clés RSA, id_ecdsapour ECDSA, id_dsapour DSA. Bien que ces fichiers contiennent les deux parties publiques et privées de la paire de clés, la partie publique est généralement extrait automatiquement dans un séparé id_*.pubfichier pour des raisons pratiques ( id_rsa.pubpour id_rsaet ainsi de suite).

user1686
la source