diff --git a/main.go b/main.go index 674f983..f5ca2e0 100644 --- a/main.go +++ b/main.go @@ -40,7 +40,9 @@ type rootCmd struct { syncBack bool printVersion bool noReuseConnection bool + disableTelemetry bool bindAddr string + remotePort string sshFlags string uploadCodeServer string } @@ -58,7 +60,9 @@ func (c *rootCmd) RegisterFlags(fl *pflag.FlagSet) { fl.BoolVar(&c.syncBack, "b", false, "sync extensions back on termination") fl.BoolVar(&c.printVersion, "version", false, "print version information and exit") fl.BoolVar(&c.noReuseConnection, "no-reuse-connection", false, "do not reuse SSH connection via control socket") + fl.BoolVar(&c.disableTelemetry, "disable-telemetry", false, "pass --disable-telemetry flag to code-server") fl.StringVar(&c.bindAddr, "bind", "", "local bind address for SSH tunnel, in [HOST][:PORT] syntax (default: 127.0.0.1)") + fl.StringVar(&c.remotePort, "remote-port", "", "specify remote port on which code-server will be started") fl.StringVar(&c.sshFlags, "ssh-flags", "", "custom SSH flags") fl.StringVar(&c.uploadCodeServer, "upload-code-server", "", "custom code-server binary to upload to the remote host") } @@ -90,9 +94,11 @@ func (c *rootCmd) Run(fl *pflag.FlagSet) { skipSync: c.skipSync, sshFlags: c.sshFlags, bindAddr: c.bindAddr, + remotePort: c.remotePort, syncBack: c.syncBack, reuseConnection: !c.noReuseConnection, uploadCodeServer: c.uploadCodeServer, + disableTelemetry: c.disableTelemetry, }) if err != nil { diff --git a/sshcode.go b/sshcode.go index 5021c09..160d280 100644 --- a/sshcode.go +++ b/sshcode.go @@ -34,6 +34,7 @@ type options struct { syncBack bool noOpen bool reuseConnection bool + disableTelemetry bool bindAddr string remotePort string sshFlags string @@ -140,13 +141,23 @@ func sshCode(host, dir string, o options) error { flog.Info("synced extensions in %s", time.Since(start)) } + codeServerFlags := []string{ + "--host 127.0.0.1", + fmt.Sprintf("--port %v", o.remotePort), + "--auth none", + } + if o.disableTelemetry { + codeServerFlags = append(codeServerFlags, "--disable-telemetry") + } + codeServerCmdStr := fmt.Sprintf("%v %v %v", codeServerPath, dir, strings.Join(codeServerFlags, " ")) + flog.Info("starting code-server...") flog.Info("Tunneling remote port %v to %v", o.remotePort, o.bindAddr) sshCmdStr := - fmt.Sprintf("ssh -tt -q -L %v:localhost:%v %v %v '%v %v --host 127.0.0.1 --auth none --port=%v'", - o.bindAddr, o.remotePort, o.sshFlags, host, codeServerPath, dir, o.remotePort, + fmt.Sprintf("ssh -tt -q -L %v:127.0.0.1:%v %v %v '%v'", + o.bindAddr, o.remotePort, o.sshFlags, host, codeServerCmdStr, ) // Starts code-server and forwards the remote port. sshCmd := exec.Command("sh", "-l", "-c", sshCmdStr)