Docker Load key "/root/.ssh/id_rsa": invalid format
For reference only.
I created a private key file key.id_rsa
manaully and pasted content to it. But when I used it to clone git repository:
$ git clone my_repo
Cloning into 'my_repo'...
Load key "/path/to/key.id_rsa": invalid format
The key's content is definitely correct. So then I tried compare my key with the other generated key by ssh-keygen
, it's truely invalid format.
Just no end of new line in my key.
After added new line to the end of key, all worked delightful~ What a suprise!
[Update]: Remember use \n
instead of \r\n
even on windows.
If the key is "invalid format", try and regenerate it with the old PEM format.
ssh-keygen -m PEM -t rsa -P ""
Make sure to add the public key to your GitHub account for proper authentication.
The OP Shammir adds in the comments:
I think the issue is that nothing is being copied from host machine to docker image during build.
In "docker build --build-arg SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa)"
returning empty", Shammir uses dockito/vault
to manage the private key, but also configure it to "AddKeysToAgent": that is not needed if the private key is not passphrase protected (as in my command above)
Another possible gotcha is if you're using a Makefile to run the docker build command. In that case the command in the Makefile would look something like:
docker-build:
docker build --build-arg SSH_PRIVATE_KEY="$(shell cat ~/.ssh/id_rsa)"
Make
unfortunately replaces newlines with spaces (make shell)
This means that the ssh key which is written into the container has a different format, yielding the error above.
I was unable to find a way to retain the newlines in the Makefile command, so I resorted to a workaround of copying the .ssh directory into the docker build context, copying the files through the Dockerfile, then removing them afterwards.