Skip to content

Instantly share code, notes, and snippets.

@dmitshur
Last active September 17, 2023 07:35
Show Gist options
  • Save dmitshur/6927554 to your computer and use it in GitHub Desktop.
Save dmitshur/6927554 to your computer and use it in GitHub Desktop.
[Legacy GOPATH mode] How to `go get` private repos using SSH key auth instead of password auth.

WARNING: This gist was created in 2013 and targets the legacy GOPATH mode. If you're reading this in 2021 or later, you're likely better served by reading https://tip.golang.org/cmd/go/#hdr-Configuration_for_downloading_non_public_code and https://golang.org/ref/mod#private-modules.

$ ssh -A vm
$ git config --global url."git@github.com:".insteadOf "https://github.com/"
$ cat ~/.gitconfig
[url "git@github.com:"]
	insteadOf = https://github.com/
$ go get github.com/private/repo && echo Success!
Success!

Sources:

@hookover
Copy link

hookover commented Nov 7, 2019

I want to use only the ssh protocol
The server supports only ssh and http protocols, not git protocols

#git ls-remote ssh://git@git.a.com/INA_financial/common_libs.git

2ca7f8d2d53331655bb18cd91906772cb5c4dcc0        HEAD
2ca7f8d2d53331655bb18cd91906772cb5c4dcc0        refs/heads/master
436b69c6abbc6f923232877616dfb7d46eb9d22b        refs/tags/v0.1.0
bc8a543429123241493923ea9ee0214d7294c362        refs/tags/v0.1.0^{}
f1b5d04d313e9e8336a135a1e13cde3b2a5d26ec        refs/tags/v0.2.0
22b4290b0c924378a38ce04bc2b7cad21ba297c3        refs/tags/v0.2.0^{}

cat ~/.gitconfig

[user]
        email = jack@a.com
[url "ssh://git@git.a.com:"]
        insteadOf = https://git.a.com

#env GIT_TERMINAL_PROMPT=1 go get -v git.a.com/INA_financial/common_libs.git

verifying git.a.com/INA_financial/common_libs.git@v0.2.0: git.a.com/INA_financial/common_libs.git@v0.2.0: reading https://sum.golang.org/lookup/git.a.com/!i!n!a_financial/common_libs.git@v0.2.0: 410 Gone

=========================================================================================

cat ~/.gitconfig

[user]
        email = jack@a.com
[url "ssh://git@git.a.com:"]
        insteadOf = http://git.a.com   //change from https to http

#go get -v -insecure git.a.com/INA_financial/common_libs.git

# cd .; git ls-remote git://git.a.com/INA_financial/common_libs
fatal: unable to connect to git.a.com:
git.a.com[0: 54.255.254.175]: errno=Connection refused

get "git.a.com/INA_financial": found meta tag get.metaImport{Prefix:"git.a.com/INA_financial", VCS:"git", RepoRoot:"http://git.a.com/INA_financial.git"} at //git.a.com/INA_financial?go-get=1
# cd .; git ls-remote https://git.a.com/INA_financial/common_libs
fatal: unable to access 'https://git.a.com/INA_financial/common_libs/': Failed to connect to git.a.com port 443: Connection refused
get "git.a.com": found meta tag get.metaImport{Prefix:"git.a.com", VCS:"git", RepoRoot:"http://git.a.com.git"} at //git.a.com/?go-get=1
go get git.a.com/INA_financial/common_libs.git: git ls-remote -q http://git.a.com/INA_financial.git in /Users/jack/go/pkg/mod/cache/vcs/8dbf799342ee3e0c5c7ad8a0b4d6b190efeb7355c25556ab50721c2f4014c1e2: exit status 128:
        GitLab: The project you were looking for could not be found.
        fatal: Could not read from remote repository.
        
        Please make sure you have the correct access rights
        and the repository exists.

@g00nix
Copy link

g00nix commented Jul 5, 2020

I have the same issue as @hookover

@lempzz
Copy link

lempzz commented Jul 27, 2020

The @bobziuchkovski's comment wasn't help me.

But i'm tried to execute next commands:

git config --global url."https://<username>:<access_token>@private-git.com/".insteadOf "https://private-git.com/"

go get private-git.com/owner/repo

@g00nix
Copy link

g00nix commented Jul 27, 2020

As a note to everybody here. When adding the overwrite to .gitconfig like so:

[url "ssh://git@example.com/"]
	insteadOf = "https://example.com/"

you will also need your env var:

export GOPRIVATE="example.com"

This should actually be part of the official docs.

@bhundven
Copy link

bhundven commented Jul 31, 2020

hrm, what about sub-projects on gitlab?

$ go get gitlab.com/SomeOrg/sub-project/project
# cd .; git clone -- https://gitlab.com/SomeOrg/sub-project.git /home/bhundven/go/src/gitlab.com/SomeOrg/sub-project
Cloning into '/home/bhundven/go/src/gitlab.com/SomeOrg/sub-project'...
Warning: Permanently added 'gitlab.com,172.65.251.78' (ECDSA) to the list of known hosts.
remote: 
remote: ========================================================================
remote: 
remote: The project you were looking for could not be found.
remote: 
remote: ========================================================================
remote: 
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
package gitlab.com/SomeOrg/sub-project/project: exit status 128

Tried:

[url "git@gitlab.com:SomeOrg"]
        insteadOf = https://gitlab.com/SomeOrg

@bhundven
Copy link

Maybe not an issue for here, but for here: https://gitlab.com/gitlab-org/gitlab-foss/-/issues/30785

@XVilka
Copy link

XVilka commented Dec 8, 2020

For those who will meet with the same problem: git config --global url."git@github.com:".insteadOf "https://github.com/" works but the local version (git config --local url."git@github.com:".insteadOf "https://github.com/") - doesn't. Likely a git bug.

@no1xsyzy
Copy link

no1xsyzy commented Feb 11, 2021

@XVilka Did you try add local config to $GOPATH/src/github.com/private/repo (by cd into it first)? In fact the local config of that repo is loaded, instead of the repo that you are working on now.

@dmitshur
Copy link
Author

This is a very old gist and may not be applicable by now. I added a warning to the top:

WARNING: This gist was created in 2013 and targets the legacy GOPATH mode. If you're reading this in 2021 or later, you're likely better served by reading https://tip.golang.org/cmd/go/#hdr-Configuration_for_downloading_non_public_code and https://golang.org/ref/mod#private-modules.

@moihn
Copy link

moihn commented May 11, 2021

For those who will meet with the same problem: git config --global url."git@github.com:".insteadOf "https://github.com/" works but the local version (git config --local url."git@github.com:".insteadOf "https://github.com/") - doesn't. Likely a git bug.

I encountered the same issue, even if I tried to setup environment variable GIT_CONFIG to point to my local git config file, it is ignored... Do you have a solution that avoids using global ~/.gitconfig file now?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment