Comment ajouter des clés SSH au fichier authorized_keys?

J'ai un serveur Ubuntu sur Amazon EC2, que j'utilise pour le développement, et aujourd'hui j'ai bêtement tout effacé de mon ~/.ssh/authorized_keys fichier. Heureusement, j'ai un SSH ouvert, donc je suis toujours connecté et je peux réparer le fichier, mais lorsque j'essaie de remettre mon fichier de clé, cela ne fonctionne pas. Je reçois toujours une autorisation refusée du serveur sur ma machine locale.

authorized_keys a les autorisations 600. J'ai essayé d'ajouter ma clé SSH avec ssh-rsa et de laisser le ssh-rsa désactivé. J'ai également essayé de faire en sorte que la clé SSH soit sur une seule ligne, mais cela n'a pas fonctionné non plus.

Y a-t-il autre chose que je dois faire comme recharger le fichier un peu comment?

Tu devrais jamais enregistrez le fichier avec son contenu commençant par -----BEGIN RSA PRIVATE KEY----- sur le serveur, c'est votre privé clé. Au lieu de cela, vous devez mettre le public clé dans le ~/.ssh/authorized_keys fichier.

Ce public la clé a le .pub extension lorsqu'elle est générée en utilisant ssh-keygen et son contenu commence par ssh-rsa AAAAB3. (Le format binaire est décrit dans les réponses à cette question).

Les permissions de ~/.ssh sur le serveur devrait être 700. Fichier ~/.ssh/authorized_keys (sur le serveur) est censé avoir un mode de 600. Les autorisations de la clé (privée) côté client doivent être de 600.

Si la clé privée n'était pas protégée par un mot de passe, et que vous la mettez sur le serveur, je vous recommande d'en générer un nouveau:

ssh-keygen -t rsa

Vous pouvez ignorer cela si vous êtes entièrement sûr que personne ne peut récupérer la clé privée supprimée du serveur.

Si cela ne vous aide pas, exécutez ssh avec des options pour plus de verbosité:

ssh -vvv user@example.com

Côté serveur, vous pouvez consulter /var/log/auth.log pour plus de détails.

Une autre façon d'installer votre clé publique dans la machine distante authorized_keys:

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Quelques avantages:

  • ne nécessite pas ssh-copy-id à installer.

  • garantit que mkdir fonctionne avant d'essayer d'ajouter id_rsa.pub de authorized_keys.

Si vous avez une authentification basée sur la connexion, utilisez ssh-copy-id pour ajouter vos clés publiques au serveur distant.

ssh-copy-id user@host
local> scp .ssh/id_rsa.pub remote.com:
local> ssh remote.com
remote> cat id_rsa.pub >> .ssh/authorized_keys
remote> rm id_rsa.pub
remote> exit

Le moyen le plus simple est de copier et coller...

Première vue / copie du contenu de votre clé publique locale id_rsa.pub y compris le début "ssh-rsa" jusqu'à ce qu'il se termine par votre adresse e-mail:

cat ~/.ssh/id_rsa.pub

Puis éditez authorized_keys sur le serveur et collez le contenu de votre presse-papiers sous toutes les autres clés de ce fichier:

nano ~/.ssh/authorized_keys

Et économisez Ctl+O, quittez le fichier Ctl+X, quittez la session SSH exit et essayez de vous reconnecter pour confirmer que cela a fonctionné. S'il ne demandait pas de mot de passe, cela fonctionnait.

Obtenez un shell sur la machine distante sur laquelle vous souhaitez placer la clé, puis vous pouvez exécuter ce one-liner pour créer les fichiers et répertoires nécessaires, définir leurs autorisations et ajouter la clé au fichier. Bien sûr, vous devez changer le KEYGOESHERE partie ci-dessous et le commentaire après.

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys

J'ai pensé que je pouvais y contribuer car il s'agit spécifiquement d'instances AWS et toutes les réponses ne traitent le problème que comme un problème Linux, comme s'il s'agissait d'un matériel. La première chose que vous devez comprendre est que vous ne devez jamais, jamais, ne pas traiter les instances EC2 comme du matériel. Cela va juste créer plus de travail pour que vous les traitiez comme volatiles. C'est le plus grand obstacle que les gens rencontrent avec AWS.Créez une AMI de votre instance et injectez la clé dont vous avez besoin dans la nouvelle instance. cloud-init s'en chargera pour you.In plus de détails tout ce que vous avez à faire est d'utiliser la clé publique correcte lors de la création de la nouvelle instance à partir de l'AMI de l'original.Si, comme dans les commentaires de la réponse approuvée, vous souhaitez générer votre propre paire de clés de fichiers pub et pem, AWS vous offre la possibilité de télécharger vos clés publiques pour les utiliser dans EC2.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws

Après avoir enregistré la clé publique, vous devez enregistrer la clé privée dans un répertoire et un fichier sur votre PC. Et dans la section auth de ssh sur putty, vous devez pointer vers le fichier de clé privée que vous avez enregistré sur votre bureau. Ça va marcher. Ça marche pour moi.

Voici une variante dans laquelle vous pourriez avoir une liste de noms de fichiers de clé publique dans un fichier texte et le gros lot de fichiers de clé publique se trouve également dans le même répertoire.

Cette variante peut être utile si vous donniez une énorme liste de fichiers de clés publiques à importer :-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done

Des années plus tard, cela-toujours-semble pertinent et actif; je voulais seulement faire un constat, parler d’avoir esquivé une balle: "Heureusement, j’ai un SSH ouvert, donc je suis toujours connecté […] "- sheesh! ;DP

Ce post, qui a été édité le jour de mon anniversaire, m’a sauvé il y a deux mois le jour de mon anniversaire.