Skip to content

Commit 8b3d959

Browse files
committed
Revert "Revert "connhelper: add ssh multiplexing""
This reverts commit 2a08462. Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
1 parent cddd186 commit 8b3d959

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

cli/connhelper/connhelper.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@ import (
55
"context"
66
"net"
77
"net/url"
8+
"os"
9+
"strconv"
810
"strings"
911

12+
"github.com/docker/cli/cli/config"
1013
"github.com/docker/cli/cli/connhelper/commandconn"
1114
"github.com/docker/cli/cli/connhelper/ssh"
1215
"github.com/pkg/errors"
@@ -52,6 +55,7 @@ func getConnectionHelper(daemonURL string, sshFlags []string) (*ConnectionHelper
5255
args = append(args, "--host", "unix://"+sp.Path)
5356
}
5457
sshFlags = addSSHTimeout(sshFlags)
58+
sshFlags = addMultiplexingArgs(sshFlags)
5559
args = append(args, "system", "dial-stdio")
5660
return commandconn.New(ctx, "ssh", append(sshFlags, sp.Args(args...)...)...)
5761
},
@@ -73,6 +77,22 @@ func GetCommandConnectionHelper(cmd string, flags ...string) (*ConnectionHelper,
7377
}, nil
7478
}
7579

80+
func addMultiplexingArgs(sshFlags []string) []string {
81+
if v := os.Getenv("DOCKER_SSH_NO_MUX"); v != "" {
82+
if b, err := strconv.ParseBool(v); err == nil && b {
83+
return nil
84+
}
85+
}
86+
if err := os.MkdirAll(config.Dir(), 0o700); err != nil {
87+
return nil
88+
}
89+
sshFlags = append(sshFlags, "-o", "ControlMaster=auto", "-o", "ControlPath="+config.Dir()+"/%r@%h:%p")
90+
if v := os.Getenv("DOCKER_SSH_MUX_PERSIST"); v != "" {
91+
sshFlags = append(sshFlags, "-o", "ControlPersist="+v)
92+
}
93+
return sshFlags
94+
}
95+
7696
func addSSHTimeout(sshFlags []string) []string {
7797
if !strings.Contains(strings.Join(sshFlags, ""), "ConnectTimeout") {
7898
sshFlags = append(sshFlags, "-o ConnectTimeout=30")

0 commit comments

Comments
 (0)