Skip to content
This repository was archived by the owner on Sep 11, 2020. It is now read-only.

Commit 69de49d

Browse files
committed
ssh: leverage proxy from environment
Signed-off-by: Jacob Blain Christen <[email protected]>
1 parent 948b0c9 commit 69de49d

File tree

4 files changed

+55
-2
lines changed

4 files changed

+55
-2
lines changed

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module gopkg.in/src-d/go-git.v4
33
require (
44
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 // indirect
55
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 // indirect
6+
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5
67
github.com/davecgh/go-spew v1.1.1 // indirect
78
github.com/emirpasic/gods v1.9.0
89
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 // indirect
@@ -20,7 +21,7 @@ require (
2021
github.com/stretchr/testify v1.2.2 // indirect
2122
github.com/xanzy/ssh-agent v0.2.0
2223
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793
23-
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd // indirect
24+
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd
2425
golang.org/x/text v0.3.0
2526
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127
2627
gopkg.in/src-d/go-billy.v4 v4.2.1

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBb
22
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs=
33
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
44
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
5+
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
6+
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
57
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
68
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
79
github.com/emirpasic/gods v1.9.0 h1:rUF4PuzEjMChMiNsVjdI+SyLu7rEqpQ5reNFnhC7oFo=

plumbing/transport/ssh/common.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
"github.com/kevinburke/ssh_config"
1313
"golang.org/x/crypto/ssh"
14+
"golang.org/x/net/proxy"
1415
)
1516

1617
// DefaultClient is the default SSH client.
@@ -115,7 +116,7 @@ func (c *command) connect() error {
115116

116117
overrideConfig(c.config, config)
117118

118-
c.client, err = ssh.Dial("tcp", c.getHostWithPort(), config)
119+
c.client, err = dial("tcp", c.getHostWithPort(), config)
119120
if err != nil {
120121
return err
121122
}
@@ -130,6 +131,19 @@ func (c *command) connect() error {
130131
return nil
131132
}
132133

134+
func dial(network, addr string, config *ssh.ClientConfig) (*ssh.Client, error) {
135+
dialer := proxy.FromEnvironment()
136+
conn, err := dialer.Dial(network, addr)
137+
if err != nil {
138+
return nil, err
139+
}
140+
c, chans, reqs, err := ssh.NewClientConn(conn, addr, config)
141+
if err != nil {
142+
return nil, err
143+
}
144+
return ssh.NewClient(c, chans, reqs), nil
145+
}
146+
133147
func (c *command) getHostWithPort() string {
134148
if addr, found := c.doGetHostWithPortFromSSHConfig(); found {
135149
return addr

plumbing/transport/ssh/proxy_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package ssh
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"net"
7+
"os"
8+
9+
"github.com/armon/go-socks5"
10+
. "gopkg.in/check.v1"
11+
)
12+
13+
type ProxySuite struct {
14+
UploadPackSuite
15+
}
16+
17+
var _ = Suite(&ProxySuite{})
18+
19+
func (s *ProxySuite) SetUpSuite(c *C) {
20+
s.UploadPackSuite.SetUpSuite(c)
21+
22+
l, err := net.Listen("tcp", "localhost:0")
23+
c.Assert(err, IsNil)
24+
25+
server, err := socks5.New(&socks5.Config{})
26+
c.Assert(err, IsNil)
27+
28+
port := l.Addr().(*net.TCPAddr).Port
29+
30+
err = os.Setenv("ALL_PROXY", fmt.Sprintf("socks5://localhost:%d", port))
31+
c.Assert(err, IsNil)
32+
33+
go func() {
34+
log.Fatal(server.Serve(l))
35+
}()
36+
}

0 commit comments

Comments
 (0)