J'ai un serveur Ubuntu sur Amazon EC2, que j'utilise pour le développement, et aujourd'hui, j'ai tout bêtement vidé de mon fichier ~/.ssh/authorized_keys
. Heureusement, un SSH est ouvert, je suis donc toujours connecté et je peux réparer le fichier, mais lorsque je tente de remettre mon fichier de clé, cela ne fonctionne pas. J'ai toujours l'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 ssh-rsa désactivé. J'ai également essayé de créer une clé SSH 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?
Vous devez ne jamais enregistrer le fichier avec son contenu commençant par -----BEGIN RSA PRIVATE KEY-----
sur le serveur, c’est-à-dire votre disque privé clé. Au lieu de cela, vous devez placer la clé publique dans le fichier ~/.ssh/authorized_keys
.
Cette clé publique a l'extension .pub
lorsqu'elle est générée à l'aide de ssh-keygen
et son contenu commence par ssh-rsa AAAAB3
. (Le format binaire est décrit dans les réponses à cette question ).
Les autorisations de ~/.ssh
sur le serveur doivent être 700. Le fichier ~/.ssh/authorized_keys
(sur le serveur) est supposé 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'est 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 ceci si vous êtes absolument certain que personne ne pourra 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 [email protected]
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 le authorized_keys
de la machine distante:
cat ~/.ssh/id_rsa.pub | ssh USER@Host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Quelques avantages:
ne nécessite pas ssh-copy-id
pour être installé.
garantit que mkdir
fonctionne avant d'essayer d'ajouter id_rsa.pub
à 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_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit
Le moyen le plus simple est de copier et coller ...
Commencez par afficher/copier le 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 électronique:
cat ~/.ssh/id_rsa.pub
Editez ensuite authorized_keys
sur le serveur et collez le contenu de votre presse-papiers au-dessous de toute autre clé de ce fichier:
nano ~/.ssh/authorized_keys
Et enregistrez Ctl+O
, quittez le fichier Ctl+X
, quittez la session SSH exit
et essayez de vous reconnecter pour confirmer que cela a fonctionné. Si cela ne demandait pas de mot de passe, cela fonctionnait.
Je pensais pouvoir y contribuer, car il s'agissait d'instances AWS en particulier et toutes les réponses traitaient simplement le problème comme un problème Linux, comme s'il s'agissait d'un élément matériel. La première chose à comprendre est que vous ne devez jamais, jamais, traiter les instances EC2 comme du matériel. Cela ne fera que créer plus de travail pour vous. Traitez-les comme volatiles. C'est le plus gros obstacle que je vois avec les gens 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 occupera pour vous. De manière plus détaillée, il vous suffit 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.
Après avoir enregistré la clé publique, vous devez enregistrer la clé privée dans un répertoire et un fichier sur votre ordinateur. Et dans la section auth de ssh sur PuTTY, vous devez pointer sur le fichier de clé privée que vous avez enregistré sur votre bureau. Ça va marcher. Ça marche pour moi.
Procurez-vous un shell sur la machine distante sur laquelle vous souhaitez placer la clé, puis exécutez ce one-liner pour créer les fichiers et les répertoires nécessaires, définir leurs autorisations et ajouter la clé au fichier. Bien sûr, vous devez changer la partie KEYGOESHERE
ci-dessous et le commentaire qui la suit.
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
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 trouvant également dans le même répertoire.
Cette variation peut être utile si vous donniez une liste énorme de fichiers de clé publique à importer :-)
$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done