Convert single line RSA private ssh key to multi line

15,353

Solution 1

Assuming a standard RSA private key that just had the newlines removed, a couple of sed replacements will get you back to the original format:

sed -e "s/-----BEGIN RSA PRIVATE KEY-----/&\n/"\
    -e "s/-----END RSA PRIVATE KEY-----/\n&/"\
    -e "s/\S\{64\}/&\n/g"\
    ~/.ssh/id_rsa

The standard key format requires the BEGIN and END statements to be on a separate line, and the base64-encoded key to be formatted at 64 columns. The above command will get you there.

Solution 2

@robby Thanks from your answer I adapted the following which worked for me.

sed -e "s/-----BEGIN RSA PRIVATE KEY-----/&\n/" -e "s/\S\{64\}/&\n/g" | sed "s/^\s//g" ~/.ssh/id_rsa

Solution 3

I adapted the solution to ed25519 algorithm to talk to Gitlab via SSH. Thanks @Robby!

RUN sed -i -e "s/-----BEGIN OPENSSH PRIVATE KEY-----/&\n/"\
    -e "s/-----END OPENSSH PRIVATE KEY-----/\n&/"\
    -e "s/\S\{70\}/&\n/g"\
    /root/.ssh/id_ed25519

Input

-----BEGIN OPENSSH PRIVATE KEY----- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX== -----END OPENSSH PRIVATE 
KEY-----

Output

-----BEGIN OPENSSH PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==
-----END OPENSSH PRIVATE KEY-----
Share:
15,353
Ikenna
Author by

Ikenna

Meta Why?

Updated on July 22, 2022

Comments

  • Ikenna
    Ikenna almost 2 years

    I have these private keys that have been converted to single line equivalent.

    These keys are quite a lot.

    So I decided to invest some time to write a script to convert.

    This has not yielded to much.

    -----BEGIN RSA PRIVATE KEY----pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4= pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4= pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4= pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4= pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4= -----END RSA PRIVATE KEY-----
    

    I am using echo ~/.ssh/id_rsa | tr " " "\n"

    This returns:

    -----BEGIN 
    RSA 
    PRIVATE 
    KEY----- 
    pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=
    pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=
    pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=
    pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=
    pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=pEdInVAbH4d0PH4=
    -----END
    RSA
    PRIVATE
    KEY-----
    
    

    I have been trying to figure out the best possible way to get this back to the right format.

  • roy
    roy over 4 years
    I tried this on Ubuntu and worked. But not on MacBook
  • RubenLaguna
    RubenLaguna almost 4 years
    you need to install GNU sed in mac with for example brew install gnu-sed and then use gsed instead of sed
  • Robby Cornelissen
    Robby Cornelissen almost 3 years
    @WilliamRoss Best guess: you don't have the same begin stanza as the one in my code (-----BEGIN RSA PRIVATE KEY-----). Maybe yours has BEGIN EC PRIVATE KEY or BEGIN PRIVATE KEY. Or maybe you deleted a hyphen by accident at some point...
  • Robby Cornelissen
    Robby Cornelissen almost 3 years
    @WilliamRoss Is removing your comment your way of indicating that my guess was correct, and your issue is solved?