Meilleure façon de copier les clés SSH sur une autre machine?

342

Je suis paresseux à la maison et utilise l’authentification par mot de passe pour mes ordinateurs personnels. Je suis prêt à passer à l'authentification par clé. Il existe de nombreuses options sur le Web pour ce faire, y compris catting puis claquage de la clé, scping la clé directement, etc.

Je cherche le moyen le plus simple et le plus recommandé de copier une clé, avec un peu de chance qu'il y ait un wrapper de commodité quelque part dans le paquet ssh Ubuntu?

Je sais déjà comment désactiver les connexions par mot de passe .

Jorge Castro
la source

Réponses:

463

La ssh-copy-idcommande (dans le paquet openssh-client et installée par défaut) fait exactement ceci:

ssh-copy-id [email protected]

copie la clé publique de votre identité par défaut (à utiliser -i identity_filepour d'autres identités) sur l'hôte distant.

L'identité par défaut est votre clé ssh "standard". Il se compose de deux fichiers (clé publique et privée) dans votre ~/.sshrépertoire, normalement nommé identity, id_rsa, id_dsa, id_ecdsaou id_ed25519(et même avec .pub), en fonction du type de clé. Si vous n'avez pas créé plus d'une clé ssh, vous n'avez pas à vous soucier de la spécification de l'identité, ssh-copy-id la choisira simplement automatiquement.

Si vous n'avez pas d'identité, vous pouvez en générer une avec l'outil ssh-keygen.

De plus, si le serveur utilise un port différent de celui par défaut ( 22), vous devez utiliser les guillemets de cette façon ( source ):

ssh-copy-id "[email protected] -p <port-number>"
Marcel Stimberg
la source
1
Quelle est l'identité par défaut?
Oxwivi
17
pour un port différent, utilisez ceci:ssh-copy-id "user@host -p 6842"
jibon57
5
Que se passe-t-il si le serveur distant que vous copiez n'accepte pas les invites de mot de passe et est fondamentalement verrouillé, sauf pour l'accès SSH?
Cyle
10
Sur mac, vous pouvez faire brew install ssh-copy-idet ensuite exécuter la commande.
Avishai
1
@MarcelStimberg, veuillez mettre à jour la réponse pour inclure le profil -i; les gens ont probablement plus d'une clé et les poussent tous, ou doivent chercher l'option -i dans les commentaires
Nick
129

J'aime la réponse de Marcel. Je ne connaissais pas cette commande. J'ai toujours utilisé ce que j'avais trouvé sur le site Web d'Oracle :

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'

Je pensais encore à le poster ici, car c’est une bonne illustration de ce que l’on peut réaliser dans un code shell avec la puissance de ssh. Mais utiliser le ssh-copy-idest définitivement un moyen plus sûr de le faire correctement!

Notez que si le dossier .sshn'existe pas déjà, la commande ci-dessus échouera. En outre, lors de la création du fichier, il peut être préférable de définir une autorisation minimale possible (en lecture-écriture, pour le propriétaire uniquement). Voici une commande plus avancée:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'
Huygens
la source
2
Ces commandes exactes fonctionnent aussi sur Mac
Mihai P.
Cela devrait fonctionner sous Unix avec le plus de shell J'ai mis à jour le message avec une commande mise à jour au cas où le dossier .sshn'existe pas du côté distant.
Huygens
1
Le catn'est pas nécessaire - une redirection d'entrée normale suffit, par exemple< ~/.ssh/id_rsa.pub | ssh ...
maxschlepzig
@Huygens Merci. Il est plus utile de se souvenir de celui-ci, car vous n'avez rien à installer et cela peut également être utile pour exécuter des commandes étrangères, par exemple pour modifier les autorisations côté serveur, comme vous l'avez montré dans votre exemple avancé.
Jonathan Komar
2
Je préfère de loin cette méthode, car elle vous permet d’utiliser ssh en mode prolixe, ce qui est utile pour comprendre pourquoi certaines choses sont brisées. sshcopyid vient de geler et n'a jamais fonctionné, cela s'est parfaitement déroulé.
Sirènes
31

Méthode graphique

  1. Ouvrez ApplicationsMots de passe et clésMes clés personnelles .
  2. Sélectionnez votre clé et puis cliquez sur à distanceConfigurer la clé pour Secure Shell .

Configurer l'ordinateur pour la connexion SSH

ændrük
la source
Je n'ai pas de "mots de passe et clés de cryptage" dans mon menu.
Jorge Castro
Quelle version d'Ubuntu utilisez-vous? Dans Ubuntu 10.04 LTS, cela devrait être disponible par défaut.
ændrük
10.10, vient d'ajouter le tag. La réponse de Marcel est ce que je recherche, bien que +1 pour votre réponse orientée bureau!
Jorge Castro
4
Ce programme est seahorse.
Gilles
1
Je pense que cette application est dans le menu Système-> Préférences dans 10.10 (je ne peux pas la vérifier pour l'instant, je suis sous 10.04)
Huygens
18

Sur Ubuntu, vous pouvez récupérer vos clés dans Launchpad:

ssh-import-id [launchpad account name]

Détails :

  1. Vous avez besoin d'un compte Launchpad, alors connectez-vous ou créez un compte
  2. Une fois connecté, cliquez sur le bouton à côté des clés SSH:
  3. Collez le contenu de votre fichier de clé publique dans ce champ (y compris le commentaire). Une telle clé ressemble à:

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
    

    Ici, ssh-rsaindique que la clé est une clé RSA, AAAAB3Nza .... UyDOFDqJpla clé réelle et lekensteynle commentaire.

  4. Enregistrez la clé en appuyant sur Importer une clé publique.
  5. Si tout s'est bien passé, votre clé devrait maintenant être listée sous Clés SSH:

Le package ssh-import-iddoit être installé sur la machine, qui doit être accessible à distance. Ce paquet est installé avec le openssh-serverpaquet car c'est un paquet recommandé pour openssh-server. Après s’être assuré que cela ssh-import-ida été installé sur la machine cliente, exécutez:

ssh-import-id [launchpad account name]

Cela téléchargera la clé publique des serveurs du Launchpad via HTTPS, ce qui vous protégera des attaques MITM.

Sur Ubuntu Lucid et avant, vous pouvez accomplir la même chose avec:

wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys

La echocommande est nécessaire pour obtenir une nouvelle ligne après la ligne avec la clé SSH.

Lekensteyn
la source
14

pour port personnalisé

ssh-copy-id -i "[email protected] -p2222"

L'option -i par défaut est ~ / .ssh / id_rsa.pub, si vous voulez une autre clé, indiquez le chemin de la clé après -i.

AVERTISSEMENT: Si vous n'avez pas écrit le -i, toutes les clés trouvées dans ~ / .ssh seront copiées.

Omar S.
la source
1
Êtes-vous sûr de cela AVERTISSEMENT? "-i identité_file - N'utilisez que la ou les clés contenues dans identity_file (plutôt que de rechercher des identités via ssh-add (1) ou dans le fichier default_ID_File). Si le nom du fichier ne se termine pas par .pub, il est ajouté. Si le nom du fichier est est omis, le default_ID_file est utilisé. "
Yousha Aleayoub
0

ssh-copy-idfait exactement cela. Je ne sais pas pourquoi certaines des autres réponses ajoutent des informations inexactes. L'aide montre les éléments suivants:

~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
    -f: force mode -- copy keys without trying to check if they are already installed
    -n: dry run    -- no keys are actually copied
    -h|-?: print this help

Je viens d'essayer ce qui suit sur le client Ubuntu 18.04 avec un serveur CentOS 7.6 et cela a fonctionné à merveille. L’exemple montre l’utilisation d’un port personnalisé 2222et la spécification d’une clé publique sur~/.ssh/path-to-rsa.pub

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 [email protected]

Avant d’exécuter la commande, j’ai utilisé le -ncommutateur à la fin pour effectuer un essai à blanc qui a confirmé que la commande fonctionnerait comme prévu. Une fois confirmé, j’exécutai à nouveau la commande comme ci-dessus, sans le -ncommutateur.

isapir
la source