Comment ajouter des clés SSH au fichier authorised_keys?

185

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 ~/.ssh/authorized_keysfichier. Heureusement, un SSH est ouvert. Je suis donc toujours connecté et je peux réparer le fichier, mais lorsque j'essaie de remettre mon fichier de clé, il ne fonctionne pas. J'ai toujours l'autorisation refusée du serveur sur ma machine locale.

authorized_keysa 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? Comment?

Dave Long
la source
3
Des années plus tard, cela semble encore pertinent et actif; je voulais seulement faire une observation, parler d'avoir esquivé une balle: "Heureusement que j'ai un SSH ouvert, donc je suis toujours connecté [...]" - sheesh! ; dP
Nostromov
1
Cet article, qui a été publié à mon anniversaire, m'a sauvé il y a deux mois le jour de mon anniversaire.
Ytpillai

Réponses:

198

Vous ne devez jamais enregistrer le fichier avec son contenu commençant par -----BEGIN RSA PRIVATE KEY-----sur le serveur, c’est votre clé privée . Au lieu de cela, vous devez placer la clé publique dans le ~/.ssh/authorized_keysfichier.

Cette clé publique a l' .pubextension lorsqu'elle est générée avec ssh-keygenet son contenu commence par ssh-rsa AAAAB3. (Le format binaire est décrit dans les réponses à cette question ).

Les autorisations de ~/.sshsur 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, lancez sshdes options pour plus de verbosité:

ssh -vvv [email protected]

Du côté du serveur, vous pouvez consulter /var/log/auth.logpour plus de détails.

Lekensteyn
la source
1
Avec les serveurs Amazon EC2, tout ce que je reçois est la clé privée (key.pem). Je n'ai nulle part de clé publique.
Dave Long
3
@Dave Long: Vous devez générer une nouvelle clé à l'aide de ssh-keygen -t rsaet placer le id_rsa.pubfichier nouvellement créé ~/.ssh/authorized_keyssur votre serveur. Voir aussi docs.amazonwebservices.com/AWSEC2/latest/UserGuide/…
Lekensteyn
15
@DaveLong: Vous pouvez générer la clé publique à partir de la clé privée à tout moment. Vous pouvez le faire simplement avec la commande suivante: ssh-keygen -y -f key.pem > key.pub
Morgan Blackthorne,
5
@MorganBlackthorne Même si c'est vrai, je vous recommande de générer vos clés privées plutôt que d'en accepter une de sources distantes. Vous ne pouvez pas être tout à fait sûr que la clé privée n'a pas été divulguée.
Lekensteyn
2
@Gerrat Fixed².
Lekensteyn
175

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-idd'être installé.

  • garanties qui mkdirfonctionne avant d'essayer d'ajouter id_rsa.pubà authorized_keys.

Marius Butuc
la source
10
Votre réponse m'a aidé à le faire sur plusieurs machines distantes sans paquets supplémentaires, merci.
nol
Cela ne garantit pas que le répertoire "~ / .ssh" et le fichier "~ / .ssh / registered_keys" seront créés avec les autorisations appropriées.
Nick
1
@ Nick, j'ai eu ce problème. Dans ce cas, il faut peut-être d'abord vérifier leur existence, s'il est manquant, créer correctement avec chmod (700 / folder, 600 / file), puis seulement ajouter? alors peut-être que ça ne peut pas être un one liner?
AnneTheAgile
7
@AnneTheAgile Je pense que changer la mkdir -p ~/.sshpartie de la réponse donnée par @MariusButuc en umask 077 && mkdir -p ~/.sshest tout ce que vous devez faire pour vous assurer qu'il fonctionnera correctement.
Nick
1
Ty @ Nick! Je testerai.
AnneTheAgile
128

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

ssh-copy-id user@host
Shoaib Nawaz
la source
1
Cela ne semble pas être une commande valide sur Mac, qui est ce que mon ordinateur client est.
Dave Long
13
sur OSX vous pouvez installer avec brassée:brew install ssh-copy-id
phil
Sur Macports, cette commande peut être installée à l’aide de sudo port install openssh +ssh_copy_id. Le +ssh_copy_idinstalls openssh avec la variante ssh_copy_id.
Stefan Lasiewski
6
Notez que les instructions sur phildawson.tumblr.com vous demandent d’installer un logiciel non approuvé en tant que root. C'est assez dangereux et un bon moyen de se faire pirater, à moins que vous ne sachiez que vous pouvez faire confiance à l'auteur.
Stefan Lasiewski
38
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
jjg
la source
16

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

Commencez par afficher / copier le contenu de votre clé publique locale, id_rsa.puby compris le début "ssh-rsa" jusqu'à ce qu'il se termine par votre adresse électronique:

cat ~/.ssh/id_rsa.pub

Puis éditez authorized_keyssur le serveur et collez le contenu de votre presse-papiers au-dessous des autres clés de ce fichier:

nano ~/.ssh/authorized_keys

Et enregistrez Ctl+O, quittez le fichier Ctl+X, quittez la session SSH exitet essayez de vous reconnecter pour confirmer que cela a fonctionné. Si cela ne demandait pas de mot de passe, cela fonctionnait.

ow3n
la source
5

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.

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

einarc
la source
3

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 on 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.

utilisateur273266
la source
1
J'adorerais si la console Windows pouvait avoir toutes les fonctionnalités de ssh ajoutées à son interpréteur
Dennis
2

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 KEYGOESHEREpartie ci-dessous et le commentaire qui 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
Sarel Botha
la source
1

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
jlmontes
la source