21

I have a public key in the format:

---- BEGIN SSH2 PUBLIC KEY ----

Comment: "somename-20060227"
AAAAB3NzaC1yc2EAAAABJQAAAIBmhLUTJiP[and so on]==

---- END SSH2 PUBLIC KEY ----

Usually I see keys in the format like this:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAqof[and so on]

Can I just copy the first key in the authorized_keys file or do I have to modify it somehow so it looks like the second one? I think the first one was generated by PUTTYgen while the second one was generated by ssh-keygen.

Daniel Serodio
  • 249
  • 3
  • 10
Björn
  • 425
  • 2
  • 4
  • 9

5 Answers5

19

use ssh-keygen -i to convert SSH2-compatible format to OpenSSH compatible format.

from man ssh-keygen:

-i This option will read an unencrypted private (or public) key file in SSH2-compatible format and print an OpenSSH compatible private (or public) key to stdout. ssh-keygen also reads the RFC 4716 SSH Public Key File Format. This option allows importing keys from several commercial SSH implementations.

alexus
  • 13,112
  • 32
  • 117
  • 174
12

This is the complete, correct answer:

ssh-keygen -i -m PKCS8 -f public-key.pem

John Deters
  • 103
  • 3
Boeboe
  • 247
  • 2
  • 3
  • 1
    "RFC4716" is the default key_format, and -m does appear to be for specifying the format of the INPUT in this instance, not the output, so you are correct. – JimNim Mar 28 '18 at 15:42
  • Technically alexus' "correct" answer is NOT wrong though, as that answer is not spelling out full syntax - only pointing to which primary flag should be used, leaving the need to check -i syntax/usage in the man page. – JimNim Mar 28 '18 at 15:48
4

You do have to convert the public key to openssh convention:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIBmhLUTJiP[and so on]== somename-20060227

Also make sure that the key occupies exactly one line and no line breaks were introduced while copying.

Dima Chubarov
  • 2,316
  • 1
  • 17
  • 28
3

Just rewrite your key in format suited for authorized_keys:

keytype keybody keyname

Keep in mind that trailing "==" are necessary placeholders to keep keylength equal to desired length.

Kondybas
  • 6,964
  • 2
  • 20
  • 24
0

To create public keys for a number of password encrypted private keys the following script will:

  1. Read the private key with ssh-keygen -e and output a public key - and ask for the private key password
  2. Create a PEM based public key and store in an environment variable
  3. Use ssh-keygen -i to create and OpenSSH compatible public key
  4. And write to a .pub output file
for i in $(ls -1 id_rsa_* | grep -v "\.pub$")  # Ignore .pub files
do
  PEM=$(ssh-keygen -e -f $i -m PEM)  # Will ask for the private key password
  echo $(ssh-keygen -i -m PEM -f <(echo "$PEM")) KEY-ALIAS > $i.pub
done

A side note, seahorse, the Ubuntu "Passwords and keys" agent, requires the public keys to be able to store the private keys.

sastorsl
  • 362
  • 2
  • 15