Le moyen le plus simple de copier des clés ssh sur une autre machine?

Je suis paresseux à la maison et j'utilise l'authentification par mot de passe pour mes machines domestiques. Je suis prêt à passer à l'authentification par clé. Il existe de nombreuses options sur le Web sur la façon de procéder, y compris la capture puis le transfert de la clé, le transfert direct de la clé, etc.

Je cherche le moyen le plus simple et recommandé de copier une clé, j'espère qu'il y a un wrapper de commodité quelque part dans le package Ubuntu ssh?

Je suis déjà au courant comment désactiver les connexions par mot de passe.

Le ssh-copy-id commande (dans le openssh-client package et installé par défaut) fait exactement cela:

ssh-copy-id user@hostname.example.com

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

L'identité par défaut est votre clé ssh "standard". Il se compose de deux fichiers (clé publique et clé privée) dans votre ~/.ssh répertoire, normalement nommé identity, id_rsa, id_dsa, id_ecdsa ou id_ed25519 (et la même chose avec .pub), selon le type de clé. Si vous n'avez pas créé plus d'une clé ssh, vous n'avez pas à vous soucier de spécifier l'identité, ssh-copy-id la sélectionnera automatiquement.

Dans le cas où 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 devriez utiliser des guillemets de cette façon (source):

ssh-copy-id "user@hostname.example.com -p <port-number>"

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"'

J'ai pensé le poster ici encore, car c'est une bonne illustration de ce qui peut être réalisé en code shell avec le pouvoir de ssh. Mais en utilisant le ssh-copy-id est définitivement un moyen plus sûr de le faire correctement!

Notez que si le dossier .ssh n'existe pas déjà, la commande ci-dessus échouera. De plus, il peut être préférable lors de la création du fichier de définir une autorisation minimale possible (essentiellement 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"'

Méthode graphique

  1. Ouvrir ApplicationMots de Passe et ClésMes Clés Personnelles.
  2. Sélectionnez votre clé, puis cliquez sur DistantConfigurer la clé pour Secure Shell.

Set Up Computer for SSH Connection

Sur Ubuntu, vous pouvez récupérer vos clés à partir du Launchpad:

ssh-import-id [launchpad account name]

Détail:

  1. Vous avez besoin d'un compte Launchpad pour connectez-vous ou créez un compte
  2. Après vous être connecté, cliquez sur le bouton à côté de 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-rsa indique que la clé est une clé RSA, AAAAB3Nza .... UyDOFDqJp est la clé réelle et lekensteyn c'est le commentaire.

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

Paquet ssh-import-id doit être installé sur la machine qui doit être accessible à distance. Ce paquet est installé avec le openssh-server paquet car c'est un paquet recommandé pour openssh-server. Après s'être assuré que ssh-import-id a été installé Sur la machine cliente, exécutez:

ssh-import-id [launchpad account name]

Cela téléchargera la clé publique à partir des serveurs Launchpad via HTTPS, ce qui vous protège 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

Le echo la commande est nécessaire pour obtenir une nouvelle ligne supplémentaire après la ligne avec la clé SSH.

pour le port personnalisé

ssh-copy-id -i "user@hostname.example.com -p2222"

- je change les valeurs par défaut en~/.ssh / id_rsa.pub, si vous voulez une autre clé, mettez le chemin de la clé après -i

AVERTISSEMENT: Si vous n'avez pas écrit le-i, il copiera toutes vos clés trouvées dans ~/.SSH

Voici une solution moins sécurisée, mais très simple(déconseillée pour les serveurs):

Déplacer ~/.ssh sur la nouvelle machine et exécutez ssh-add. TERMINÉ!

RÉPONSE LONGUE:

  1. Dans l'ancienne machine, prenez le dossier ~/.ssh sur une clé USB ou sur tout autre stockage de votre choix.
  2. Sur la nouvelle machine, placez le dossier sous ~ aka /home/$USER.
  3. Exécuter ssh-add, sur la nouvelle machine terminée.

ssh-copy-id c'est exactement ce qu'il fait. Je ne sais pas pourquoi certaines des autres réponses ici ajoutent des informations inexactes. L'aide montre ce qui suit:

~$ ssh-copy-id -hUsage: /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é comme un charme. L'exemple montre l'utilisation d'un port personnalisé de 2222, et en spécifiant une clé publique à ~/.ssh/path-to-rsa.pub

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 myusername@hostname.tld

Avant d'exécuter la commande, j'ai en fait utilisé le -n basculez à la fin pour effectuer une exécution à sec qui a confirmé que la commande fonctionnera comme prévu. Une fois que je l'ai confirmé, j'ai exécuté la commande à nouveau comme ci-dessus, sans le -n commutateur.

Si vous avez déjà une clé d'hôte comme dans le cas d'AWS EC2, procédez comme suit

cat ~/.ssh/id_rsa.pub | ssh -i hostkey.pem hostname@hostaddress 'cat >> .ssh/authorized_keys && echo "Key copied" '

La prochaine fois, faites simplement ceci:

ssh hostname@hostaddress