I’m trying to get
Pkg to use a different SSH key when it instantiates a project. I naively tried this:
env GIT_SSH_COMMAND='ssh -i /path/to/key' julia --project -e 'using Pkg; Pkg.instantiate()'
But it doesn’t seem to work. Is there a different way to do this?
Pkg doesn’t use the
ssh binary but instead
libssh2 doesn’t use the
GIT_SSH_COMMAND environment variable but instead
SSH_KEY_PATH for the private key and
SSH_PUB_KEY_PATH for the public key. Yes, it needs both and yes, it’s annoying. All information is available in the private key and the public key can be extracted from it using
libssh2 doesn’t include the necessary crypto support to do it internally.
Edit: Strictly speaking
SSH_PUB_KEY_PATH aren’t used by
libssh2. Rather it’s Julia’s wrapper of
libgit2 that reads those and passes them on through the internal APIs to libssh2.
If you’re on Windows you might also run into https://github.com/JuliaLang/julia/issues/28933 depending on how your git server is configured.
I just tried this (with julia 1.4.0) and it does not work — Defined both env variables, but Pkg keeps asking for the location of the private key (actually guesses it correctly, as it is the default), after three attemps, fails
I have submitted an issue: https://github.com/JuliaLang/Pkg.jl/issues/1733
If you already have the key in the default location, setting
SSH_PUB_KEY_PATH won’t help. It is unfortunate that it keeps asking for
private key location when what it really means is that something, anything, went wrong during the authentication, and frequently the location of the key is not at all the problem.
Sadly it’s not that easy to debug this. If you have control of the server end you may be able to enable debug output from the ssh server and possibly make sense of it. If you cannot get information from the server and you are sufficiently desperate you can try https://github.com/JuliaLang/Pkg.jl/issues/1516#issuecomment-560794389.