Konvertera SSH-nycklar och olika format

Publika- och privata SSH-nycklar är väldigt smidiga och säkra att använda för inloggning. Men, som med allt annat, så finns det lite olika format. OpenSSH, Putty, SSH2, m.m. har alla samma typ av nycklar men med lite variationer.

Skapa en nyckel

Vi börjar med den enklaste formen, att skapa ett klassiskt SSH-nyckelpar:

ssh-keygen -t rsa -C "Testnyckel" -f testkey

Använd alltid RSA-nyckel så blir ditt liv enklare. Halsskäggen på OpenSSH har bestämt att RSA är bra, så har du några synpunkter är det bara att ta det med dem direkt.

Efter att ha skrivit in lösenord så finns det nu två filer, testkey och testkey.pub som ser ut och har formatet något i stil med:

Heja-Anders:a anders$ cat testkey
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAwi9vjrZHgyk89gT94w5mKsgkBhtvMz0GGtfIYjdWnIpRyrs7
bxQNx70Y6rRCP6wg/augpMgkWv/4b5KW4GDxu/tFPmx1V5EiamZO1DtRccS+dDGA
Rxu+1vYn3vOuS3U72Kl1CVYdvwHN3RTrbtC46KqYFEeOQVIM9QDcC6UzoEMNdikT
NM7xN/rirFk3zrxmtWpS9JDFuL6YS8TR5PM2LSzim7zoE0YdhLTgm5U/Pvjn+6mF
t1Zdzgfe9aVAVMJbkgoVEi3X4MoIVnNXdQoKW8TMj1luq5NdiADsyWxovbZHQpjb
wM95tJ9Y7BjfJxteI9OnOtzhBAYX3viUGIKZKwIDAQABAoIBAQCsmNMUSwoXF7Fa
jqdHiMXgotH6J6pYJZZmh4NRYRR3wS3f/zldirqQ3Y/nFV+JDqqoLkN0E3zU8Y1V
RjsaprBWQImUaXyG37ZyUgsg8rR6ZcBOsKzvB0dB87sOnRM/eK0/76baLJP18VmU
dwKoFZc1HmRcKhnUD2T648+x/h18BG6u5B3F0M2WCkvF4SbpBphlRCZfqVKOMyac
r9MNgAREU7FeIm6jakteLI4jBvYIS4v095sWRaPOqQbCrOZyC0PbS27MPmJr8uGw
qAJ45ZeG6GnpfD3x8G1tlPiZs37a8GsahxeAOLxl0rsk0eBy8PqauTyR+JAaLpmj
lSGdKHMBAoGBAPhB02PnJYBPR3cjlfJZvOulDQ2r/cSDj9F6j2Ail9bqavGlyOCV
YPtClsZro1diHxbljz4N9EPPCIMH5Xk7mngUrllQL/8ubuTywznKcOi8MCWb4cuy
1oMSuzKCDbHk6idwBYit79zeDzhIyfBuW2/kKGx663karLdV2ANH/LWrAoGBAMg9
4Yupe9fvtgboA/RcBk7vxTIJA5JOxlgs0yAo9h821tFZkypALxXsqnqTR5PCPync
6BZD0jh+l3pcA/iNizzCHiGoDGYne/Siq7h1pS8xNefv4EmYJLED7MxwfvBNXzeb
eRMLfT3fltxFOHO51nb0MHbuT8mqZTIHg10eFyqBAoGBAJn5+erUyuWyRlkWsUIH
dq2RSW9ZZaQlFWaP5a1yx0p9SqdmdBkXjXdJ7cpTqJPiP/Yrm5SZgw8rsdPTafiv
hzdDXH/4xEw5uH44M+38KduwHQy2im2VFodlbsX89BGKMdEUIdqMR2FuOXJncxi0
2fGkSY4/Dx2l9cogbEJcu9jRAoGBAKx32A8R4HAhsDeMmPNcW7abf85Twza+EMob
eZDmlu5VrnrMWxv2Algw6rj+p5TVps+ozGF48tTj/BZQsL7hMv8W9xroAh3ufi47
+gm7kpXuHc7yZc0ddOTeS5PehQb2rT9Y8tR7fdjP/sEkAbZzZww30JJvOlupHtYT
cIrAgxWBAoGAXBnDPBu6Vf1f67aSoD3anWmPdNA7FcgWn4BHO2U43l5KHxLOAI4X
LBt8nIKdaxp5YArkHGL+aOLUIy+19eOD/iJPDJnKFzT4Oyj7M/RPgozK+7If75mF
NUkLP3xvBqHkzn1HObLnQQW3DMUqjIqo9bi7kZrBZeqxhjxQU9XASBk=
-----END RSA PRIVATE KEY-----

och:

Heja-Anders:a anders$ cat testkey.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCL2+OtkeDKTz2BP3jDmYqyCQGG28zPQYa18hiN1acilHKuztvFA3HvRjqtEI/rCD9q6CkyCRa//hvkpbgYPG7+0U+bHVXkSJqZk7UO1FxxL50MYBHG77W9ife865LdTvYqXUJVh2/Ac3dFOtu0LjoqpgUR45BUgz1ANwLpTOgQw12KRM0zvE3+uKsWTfOvGa1alL0kMW4vphLxNHk8zYtLOKbvOgTRh2EtOCblT8++Of7qYW3Vl3OB971pUBUwluSChUSLdfgyghWc1d1CgpbxMyPWW6rk12IAOzJbGi9tkdCmNvAz3m0n1jsGN8nG14j06c63OEEBhfe+JQYgpkr Testnyckel

Du kan nu kopiera testkey.pub direkt till din ~/.ssh/authorized_keys-fil om du vill kunna använda den privata nyckeln för att logga in.

För att kolla fingerprint och att verifiera att den publika nyckeln verkligen är i rätt format kan man köra:

Heja-Anders:a anders$ ssh-keygen -l -f testkey.pub 
2048 SHA256:IIk8dlnG5DpAjppGXGExtcieMqxLgLMsXlh6y4/dGxs Testnyckel (RSA)

Om du har tappat bort den publika nyckeln kan du använda den privata för att återskapa den publika nyckeln:

Heja-Anders:a anders$ ssh-keygen -y -f testkey
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCL2+OtkeDKTz2BP3jDmYqyCQGG28zPQYa18hiN1acilHKuztvFA3HvRjqtEI/rCD9q6CkyCRa//hvkpbgYPG7+0U+bHVXkSJqZk7UO1FxxL50MYBHG77W9ife865LdTvYqXUJVh2/Ac3dFOtu0LjoqpgUR45BUgz1ANwLpTOgQw12KRM0zvE3+uKsWTfOvGa1alL0kMW4vphLxNHk8zYtLOKbvOgTRh2EtOCblT8++Of7qYW3Vl3OB971pUBUwluSChUSLdfgyghWc1d1CgpbxMyPWW6rk12IAOzJbGi9tkdCmNvAz3m0n1jsGN8nG14j06c63OEEBhfe+JQYgpkr

SSH2-formatet

Många kommersiella SSH-implementationer använder istället ett SSH2-format (RFC 4716). Om du behöver exportera din publika nyckel kan du skiva:

Heja-Anders:a anders$ ssh-keygen -e -f testkey
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA, converted by anders@Heja-Anders from OpenSSH"
AAAAB3NzaC1yc2EAAAADAQABAAABAQDCL2+OtkeDKTz2BP3jDmYqyCQGG28zPQYa18hiN1
acilHKuztvFA3HvRjqtEI/rCD9q6CkyCRa//hvkpbgYPG7+0U+bHVXkSJqZk7UO1FxxL50
MYBHG77W9ife865LdTvYqXUJVh2/Ac3dFOtu0LjoqpgUR45BUgz1ANwLpTOgQw12KRM0zv
E3+uKsWTfOvGa1alL0kMW4vphLxNHk8zYtLOKbvOgTRh2EtOCblT8++Of7qYW3Vl3OB971
pUBUwluSChUSLdfgyghWc1d1CgpbxMyPWW6rk12IAOzJbGi9tkdCmNvAz3m0n1jsGN8nG1
4j06c63OEEBhfe+JQYgpkr
---- END SSH2 PUBLIC KEY ----

Om det istället är tvärtom, att du har en SSH2-nyckel du vill lägga in på din server så måste du först konvertera nyckeln så att OpenSSH kan tolka den.

För att konvertera den publika SSH2-nyckeln till openssh-format, måste vi istället skriva:

Heja-Anders:a anders$ ssh-keygen -i -f testkey.ssh2 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCL2+OtkeDKTz2BP3jDmYqyCQGG28zPQYa18hiN1acilHKuztvFA3HvRjqtEI/rCD9q6CkyCRa//hvkpbgYPG7+0U+bHVXkSJqZk7UO1FxxL50MYBHG77W9ife865LdTvYqXUJVh2/Ac3dFOtu0LjoqpgUR45BUgz1ANwLpTOgQw12KRM0zvE3+uKsWTfOvGa1alL0kMW4vphLxNHk8zYtLOKbvOgTRh2EtOCblT8++Of7qYW3Vl3OB971pUBUwluSChUSLdfgyghWc1d1CgpbxMyPWW6rk12IAOzJbGi9tkdCmNvAz3m0n1jsGN8nG14j06c63OEEBhfe+JQYgpkr

Putty-format

Ganska krångligt, eller hur? Det blir inte bättre av att Putty, som är en bra SSH-terminal för bl.a. Windows, sparar sina nycklar i ett eget format.

Ett nyckelpar sparat med Putty ser ut ungefär så här:

root@vps-nnnnn:~# cat putty_test_key 
PuTTY-User-Key-File-2: ssh-rsa
Encryption: none
Comment: rsa-key-20110705
Public-Lines: 4
AAAAB3NzaC1yc2EAAAABJQAAAIEAlhgVdtuFmGPWqSv9Km+WnI2k0OI06ou4z7bK
PvkoUo3+qGyUYdcsSH+MwBaHws85eZ0mXbfMonhU1XPfusQXjJUYRrWl35jIFDYp
thIhtuxr0lAmKQE3TYdjmrItIl5ycPXwWfVD0PNqXVhxGdxenNFI9nIZGaVMfxzT
wdC+vZk=
Private-Lines: 8
AAAAgCBz6PcatRoHv7Xf/2MfC87ShIAw6NjEQ6KIYxSI5h+v/7W2nJ+IeEcG0lML
ylOibUq6Mc8S+9AaBIEtz4JT6WosTQEGApX5AeNPnS2Cif5/XtE+y0Pv0d33lDjT
CQ8/dhsIhY/Lrpr7Vg+QgP0NCle0ve2Jj0WVQTvc3eXgE6ZNAAAAQQDJvpxMWbbW
JaDJnxLx8z/qZMLFWyiRtfjJ55fRoKBrjt98MFGYoy5gvUza5gjWnYUfWklJDcwr
AHNnyXDgUAobAAAAQQC+dYWtgDMi+bgcU7CkcD308IfIXuY6VrIkbnwQgpttYVRy
Vk9OmRXIPwiBNn6pcUIOAEKM1Kun/lbXiAnEE9JbAAAAQE0xHvmOZiGJQzGTiqhz
eS3V/VMtKwBm6VnuY1Kmz8JA+1A7yE0vl53+c5W9TGeeeCbiS6QM5dQ7r7WwiVCI
gN4=
Private-MAC: 4ab43bff452e8902e53432288888bfa1d394543f 

Naturligtvis kan man på egen hand klippa och klistra ut nyckeln, men för Ubuntu finns ett paket som heter putty-tools.

apt-get install putty-tools

För att få ut den publika nyckeln från Putty-nyckeln kan vi skriva:

root@vps-nnnnn:~# puttygen putty_test_key -L
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAlhgVdtuFmGPWqSv9Km+WnI2k0OI06ou4z7bKPvkoUo3+qGyUYdcsSH+MwBaHws85eZ0mXbfMonhU1XPfusQXjJUYRrWl35jIFDYpthIhtuxr0lAmKQE3TYdjmrItIl5ycPXwWfVD0PNqXVhxGdxenNFI9nIZGaVMfxzTwdC+vZk= rsa-key-20110705

Om vi istället vill plocka fram den privata, skriver vi så här:

root@vps-nnnnn:~# puttygen putty_test_key -O private-openssh -o putty_test_priv_key && cat putty_test_priv_key
-----BEGIN RSA PRIVATE KEY-----
MIICWgIBAAKBgQCWGBV224WYY9apK/0qb5acjaTQ4jTqi7jPtso++ShSjf6obJRh
1yxIf4zAFofCzzl5nSZdt8yieFTVc9+6xBeMlRhGtaXfmMgUNim2EiG27GvSUCYp
ATdNh2Oasi0iXnJw9fBZ9UPQ82pdWHEZ3F6c0Uj2chkZpUx/HNPB0L69mQIBJQKB
gCBz6PcatRoHv7Xf/2MfC87ShIAw6NjEQ6KIYxSI5h+v/7W2nJ+IeEcG0lMLylOi
bUq6Mc8S+9AaBIEtz4JT6WosTQEGApX5AeNPnS2Cif5/XtE+y0Pv0d33lDjTCQ8/
dhsIhY/Lrpr7Vg+QgP0NCle0ve2Jj0WVQTvc3eXgE6ZNAkEAyb6cTFm21iWgyZ8S
8fM/6mTCxVsokbX4yeeX0aCga47ffDBRmKMuYL1M2uYI1p2FH1pJSQ3MKwBzZ8lw
4FAKGwJBAL51ha2AMyL5uBxTsKRwPfTwh8he5jpWsiRufBCCm21hVHJWT06ZFcg/
CIE2fqlxQg4AQozUq6f+VteICcQT0lsCQH1oplj5f34zEOwI8BncZgBoJgv6ZVOo
eA7OO8d/hlCywkZHjKr9pzU3ZyBJziSLbm1veanz0fE3oa84B+ViL8sCQQCK+9BA
VqHbQJsblwRcUegFxEdos/Qcu84aldAnuUD8ynvku4X7FcPJehr2gbZf+LOpWiK5
y5/bdGjieAcgYX3TAkBNMR75jmYhiUMxk4qoc3kt1f1TLSsAZulZ7mNSps/CQPtQ
O8hNL5ed/nOVvUxnnngm4kukDOXUO6+1sIlQiIDe
-----END RSA PRIVATE KEY-----

PKCS8-format

Om din nyckel däremot ser ut så här

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwi9vjrZHgyk89gT94w5m
KsgkBhtvMz0GGtfIYjdWnIpRyrs7bxQNx70Y6rRCP6wg/augpMgkWv/4b5KW4GDx
u/tFPmx1V5EiamZO1DtRccS+dDGARxu+1vYn3vOuS3U72Kl1CVYdvwHN3RTrbtC4
6KqYFEeOQVIM9QDcC6UzoEMNdikTNM7xN/rirFk3zrxmtWpS9JDFuL6YS8TR5PM2
LSzim7zoE0YdhLTgm5U/Pvjn+6mFt1Zdzgfe9aVAVMJbkgoVEi3X4MoIVnNXdQoK
W8TMj1luq5NdiADsyWxovbZHQpjbwM95tJ9Y7BjfJxteI9OnOtzhBAYX3viUGIKZ
KwIDAQAB
-----END PUBLIC KEY-----

Då har du en nyckel i PKCS8-format.

Konvertera den till OpenSSH-format med följande kommando:

Heja-Anders:a anders$ ssh-keygen -i -mPKCS8 -f testkey.pkcs8.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCL2+OtkeDKTz2BP3jDmYqyCQGG28zPQYa18hiN1acilHKuztvFA3HvRjqtEI/rCD9q6CkyCRa//hvkpbgYPG7+0U+bHVXkSJqZk7UO1FxxL50MYBHG77W9ife865LdTvYqXUJVh2/Ac3dFOtu0LjoqpgUR45BUgz1ANwLpTOgQw12KRM0zvE3+uKsWTfOvGa1alL0kMW4vphLxNHk8zYtLOKbvOgTRh2EtOCblT8++Of7qYW3Vl3OB971pUBUwluSChUSLdfgyghWc1d1CgpbxMyPWW6rk12IAOzJbGi9tkdCmNvAz3m0n1jsGN8nG14j06c63OEEBhfe+JQYgpkr