From 06d31be5a7e1d679cc6a191aa9ff1783adfa0543 Mon Sep 17 00:00:00 2001 From: lyx-tec Date: Tue, 2 Jun 2026 23:32:16 +0800 Subject: [PATCH 1/8] fix: add ProxyCommand support for SSH connections WaveTerm previously ignored the ProxyCommand directive in ~/.ssh/config, causing connections via SSH config Host entries with ProxyCommand to fail with 'Disconnected from xxx'. This change: - Parses ProxyCommand from SSH config in findSshConfigKeywords - Executes the proxy command via os/exec with %h/%p/%r expansion - Wraps command stdin/stdout as net.Conn via net.Pipe() - Cleans up the subprocess on connection close via proxyCommandConn Affects: pkg/wconfig/settingsconfig.go, pkg/remote/sshclient.go, frontend/types/gotypes.d.ts --- frontend/types/gotypes.d.ts | 1 + pkg/remote/sshclient.go | 75 +++++++++++++++++++++++++++++++++-- pkg/wconfig/settingsconfig.go | 1 + 3 files changed, 74 insertions(+), 3 deletions(-) diff --git a/frontend/types/gotypes.d.ts b/frontend/types/gotypes.d.ts index b3220ab6d1..bb07f466b0 100644 --- a/frontend/types/gotypes.d.ts +++ b/frontend/types/gotypes.d.ts @@ -852,6 +852,7 @@ declare global { "ssh:identityagent"?: string; "ssh:identitiesonly"?: boolean; "ssh:proxyjump"?: string[]; + "ssh:proxycommand"?: string; "ssh:userknownhostsfile"?: string[]; "ssh:globalknownhostsfile"?: string[]; }; diff --git a/pkg/remote/sshclient.go b/pkg/remote/sshclient.go index b1c9faca21..23983e9eb2 100644 --- a/pkg/remote/sshclient.go +++ b/pkg/remote/sshclient.go @@ -838,10 +838,49 @@ func createClientConfig(connCtx context.Context, sshKeywords *wconfig.ConnKeywor }, nil } -func connectInternal(ctx context.Context, networkAddr string, clientConfig *ssh.ClientConfig, currentClient *ssh.Client) (*ssh.Client, error) { +func expandProxyCommand(tmpl string, host string, port string, user string) string { + r := strings.NewReplacer( + "%h", host, + "%p", port, + "%r", user, + "%%", "%", + ) + return r.Replace(tmpl) +} + +func connectInternal(ctx context.Context, networkAddr string, clientConfig *ssh.ClientConfig, currentClient *ssh.Client, proxyCmd string) (*ssh.Client, error) { var clientConn net.Conn var err error - if currentClient == nil { + + if proxyCmd != "" { + host, port, _ := net.SplitHostPort(networkAddr) + user := clientConfig.User + expandedCmd := expandProxyCommand(proxyCmd, host, port, user) + blocklogger.Infof(ctx, "[conndebug] ssh proxycommand: %s\n", expandedCmd) + + var cmd *exec.Cmd + if runtime.GOOS == "windows" { + cmd = exec.CommandContext(ctx, "cmd", "/c", expandedCmd) + } else { + cmd = exec.CommandContext(ctx, "sh", "-c", expandedCmd) + } + local, remote := net.Pipe() + cmd.Stdin = remote + cmd.Stdout = remote + cmd.Stderr = remote + + err = cmd.Start() + if err != nil { + remote.Close() + local.Close() + return nil, utilds.MakeSubCodedError(ConnErrCode_Dial, "proxycmd-start", err) + } + clientConn = &proxyCommandConn{ + Conn: local, + cmd: cmd, + remote: remote, + } + } else if currentClient == nil { d := net.Dialer{Timeout: clientConfig.Timeout} blocklogger.Infof(ctx, "[conndebug] ssh dial %s\n", networkAddr) clientConn, err = d.DialContext(ctx, "tcp", networkAddr) @@ -868,6 +907,22 @@ func connectInternal(ctx context.Context, networkAddr string, clientConfig *ssh. return ssh.NewClient(c, chans, reqs), nil } +// proxyCommandConn wraps a net.Pipe connection with an os/exec Cmd. +// When the connection is closed, the remote pipe end is closed and the +// command process is waited on (reaped) in the background. +type proxyCommandConn struct { + net.Conn + cmd *exec.Cmd + remote net.Conn +} + +func (pcc *proxyCommandConn) Close() error { + pcc.remote.Close() + err := pcc.Conn.Close() + go pcc.cmd.Wait() + return err +} + func ConnectToClient(connCtx context.Context, opts *SSHOpts, currentClient *ssh.Client, jumpNum int32, connFlags *wconfig.ConnKeywords) (*ssh.Client, int32, error) { blocklogger.Infof(connCtx, "[conndebug] ConnectToClient %s (jump:%d)...\n", opts.String(), jumpNum) debugInfo := &ConnectionDebugInfo{ @@ -950,8 +1005,9 @@ func ConnectToClient(connCtx context.Context, opts *SSHOpts, currentClient *ssh. if err != nil { return nil, debugInfo.JumpNum, ConnectionError{ConnectionDebugInfo: debugInfo, Err: err} } + proxyCmd := utilfn.SafeDeref(sshKeywords.SshProxyCommand) networkAddr := utilfn.SafeDeref(sshKeywords.SshHostName) + ":" + utilfn.SafeDeref(sshKeywords.SshPort) - client, err := connectInternal(connCtx, networkAddr, clientConfig, debugInfo.CurrentClient) + client, err := connectInternal(connCtx, networkAddr, clientConfig, debugInfo.CurrentClient, proxyCmd) if err != nil { return client, debugInfo.JumpNum, ConnectionError{ConnectionDebugInfo: debugInfo, Err: err} } @@ -1100,6 +1156,15 @@ func findSshConfigKeywords(hostPattern string) (connKeywords *wconfig.ConnKeywor } sshKeywords.SshProxyJump = append(sshKeywords.SshProxyJump, proxyJumpName) } + + proxyCommandRaw, err := WaveSshConfigUserSettings().GetStrict(hostPattern, "ProxyCommand") + if err != nil { + return nil, err + } + proxyCommandClean := trimquotes.TryTrimQuotes(proxyCommandRaw) + if proxyCommandClean != "" { + sshKeywords.SshProxyCommand = &proxyCommandClean + } rawUserKnownHostsFile, _ := WaveSshConfigUserSettings().GetStrict(hostPattern, "UserKnownHostsFile") sshKeywords.SshUserKnownHostsFile = strings.Fields(rawUserKnownHostsFile) // TODO - smarter splitting escaped spaces and quotes rawGlobalKnownHostsFile, _ := WaveSshConfigUserSettings().GetStrict(hostPattern, "GlobalKnownHostsFile") @@ -1130,6 +1195,7 @@ func findSshDefaults(hostPattern string) (connKeywords *wconfig.ConnKeywords, ou sshKeywords.SshProxyJump = []string{} sshKeywords.SshUserKnownHostsFile = strings.Fields(ssh_config.Default("UserKnownHostsFile")) sshKeywords.SshGlobalKnownHostsFile = strings.Fields(ssh_config.Default("GlobalKnownHostsFile")) + sshKeywords.SshProxyCommand = nil return sshKeywords, nil } @@ -1197,6 +1263,9 @@ func mergeKeywords(oldKeywords *wconfig.ConnKeywords, newKeywords *wconfig.ConnK if newKeywords.SshProxyJump != nil { outKeywords.SshProxyJump = newKeywords.SshProxyJump } + if newKeywords.SshProxyCommand != nil { + outKeywords.SshProxyCommand = newKeywords.SshProxyCommand + } if newKeywords.SshUserKnownHostsFile != nil { outKeywords.SshUserKnownHostsFile = newKeywords.SshUserKnownHostsFile } diff --git a/pkg/wconfig/settingsconfig.go b/pkg/wconfig/settingsconfig.go index 67118b1670..831dbb6623 100644 --- a/pkg/wconfig/settingsconfig.go +++ b/pkg/wconfig/settingsconfig.go @@ -419,6 +419,7 @@ type ConnKeywords struct { SshIdentityAgent *string `json:"ssh:identityagent,omitempty"` SshIdentitiesOnly *bool `json:"ssh:identitiesonly,omitempty"` SshProxyJump []string `json:"ssh:proxyjump,omitempty"` + SshProxyCommand *string `json:"ssh:proxycommand,omitempty"` SshUserKnownHostsFile []string `json:"ssh:userknownhostsfile,omitempty"` SshGlobalKnownHostsFile []string `json:"ssh:globalknownhostsfile,omitempty"` } From ebc8576032eeebe1de8c02db43f5536d758d6537 Mon Sep 17 00:00:00 2001 From: lyx-tec Date: Thu, 4 Jun 2026 08:43:35 +0800 Subject: [PATCH 2/8] fix: searchInputRef variable name typo - Change 'providedInputRef' to 'searchInputRef' in search.tsx - Add ssh:proxycommand to schema/connections.json - Run go mod tidy --- Dockerfile.ssh-test | 10 +++++++ frontend/app/element/search.tsx | 3 +-- go.mod | 1 - go.sum | 2 -- schema/connections.json | 3 +++ ssh-connected.png | Bin 0 -> 76956 bytes ssh-test/go.mod | 7 +++++ ssh-test/go.sum | 6 +++++ ssh-test/main.go | 45 ++++++++++++++++++++++++++++++++ 9 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 Dockerfile.ssh-test create mode 100644 ssh-connected.png create mode 100644 ssh-test/go.mod create mode 100644 ssh-test/go.sum create mode 100644 ssh-test/main.go diff --git a/Dockerfile.ssh-test b/Dockerfile.ssh-test new file mode 100644 index 0000000000..f28de8636f --- /dev/null +++ b/Dockerfile.ssh-test @@ -0,0 +1,10 @@ +FROM ubuntu:22.04 +RUN apt-get update && apt-get install -y openssh-server && \ + mkdir -p /root/.ssh && \ + echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && \ + echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config && \ + echo "UsePAM no" >> /etc/ssh/sshd_config && \ + echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config && \ + mkdir -p /run/sshd +EXPOSE 22 +CMD ["/usr/sbin/sshd", "-D", "-p", "22"] diff --git a/frontend/app/element/search.tsx b/frontend/app/element/search.tsx index 923ed464ce..10fd0af0e1 100644 --- a/frontend/app/element/search.tsx +++ b/frontend/app/element/search.tsx @@ -36,13 +36,12 @@ const SearchComponent = ({ onPrev, }: SearchProps) => { const localInputRef = useRef(null); - const inputRef = providedInputRef || localInputRef; + const inputRef = searchInputRef || localInputRef; const [isOpen, setIsOpen] = useAtom(isOpenAtom); const [search, setSearch] = useAtom(searchAtom); const [index, setIndex] = useAtom(indexAtom); const [numResults, setNumResults] = useAtom(numResultsAtom); const [focusInputCounter, setFocusInputCounter] = useAtom(focusInputAtom); - const inputRef = useRef(null); const handleOpenChange = useCallback((open: boolean) => { setIsOpen(open); diff --git a/go.mod b/go.mod index 2165fda9dc..460763ba8f 100644 --- a/go.mod +++ b/go.mod @@ -60,7 +60,6 @@ require ( github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/outrigdev/goid v0.3.0 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/sirupsen/logrus v1.9.3 // indirect diff --git a/go.sum b/go.sum index 41ae6f4cda..139b34b195 100644 --- a/go.sum +++ b/go.sum @@ -108,8 +108,6 @@ github.com/mattn/go-sqlite3 v1.14.40 h1:f7+saIsbq4EF86mUqe0uiecQOJYMOdfi5uATADmU github.com/mattn/go-sqlite3 v1.14.40/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/outrigdev/goid v0.3.0 h1:t/otQD3EXc45cLtQVPUnNgEyRaTQA4cPeu3qVcrsIws= -github.com/outrigdev/goid v0.3.0/go.mod h1:hEH7f27ypN/GHWt/7gvkRoFYR0LZizfUBIAbak4neVE= github.com/photostorm/pty v1.1.19-0.20230903182454-31354506054b h1:cLGKfKb1uk0hxI0Q8L83UAJPpeJ+gSpn3cCU/tjd3eg= github.com/photostorm/pty v1.1.19-0.20230903182454-31354506054b/go.mod h1:KO+FcPtyLAiRC0hJwreJVvfwc7vnNz77UxBTIGHdPVk= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= diff --git a/schema/connections.json b/schema/connections.json index 3cb33b5d55..b4c947525e 100644 --- a/schema/connections.json +++ b/schema/connections.json @@ -114,6 +114,9 @@ }, "type": "array" }, + "ssh:proxycommand": { + "type": "string" + }, "ssh:userknownhostsfile": { "items": { "type": "string" diff --git a/ssh-connected.png b/ssh-connected.png new file mode 100644 index 0000000000000000000000000000000000000000..0261418a758e820c4b3298cdadf86882e7dc57fb GIT binary patch literal 76956 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

h7M;eEa8zHvarjdubu++654PZZ0i> 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 literal 0 HcmV?d00001 diff --git a/ssh-test/go.mod b/ssh-test/go.mod new file mode 100644 index 0000000000..14308a0518 --- /dev/null +++ b/ssh-test/go.mod @@ -0,0 +1,7 @@ +module ssh-test + +go 1.25.6 + +require golang.org/x/crypto v0.52.0 + +require golang.org/x/sys v0.45.0 // indirect diff --git a/ssh-test/go.sum b/ssh-test/go.sum new file mode 100644 index 0000000000..3f17939a32 --- /dev/null +++ b/ssh-test/go.sum @@ -0,0 +1,6 @@ +golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= +golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= diff --git a/ssh-test/main.go b/ssh-test/main.go new file mode 100644 index 0000000000..c33e3794d7 --- /dev/null +++ b/ssh-test/main.go @@ -0,0 +1,45 @@ +package main + +import ( + "fmt" + "golang.org/x/crypto/ssh" + "os" +) + +func main() { + key, err := os.ReadFile(os.ExpandEnv("$USERPROFILE/.ssh/id_ed25519_test")) + if err != nil { + fmt.Printf("Error reading key: %v\n", err) + os.Exit(1) + } + signer, err := ssh.ParsePrivateKey(key) + if err != nil { + fmt.Printf("Error parsing key: %v\n", err) + os.Exit(1) + } + config := &ssh.ClientConfig{ + User: "root", + Auth: []ssh.AuthMethod{ + ssh.PublicKeys(signer), + }, + HostKeyCallback: ssh.InsecureIgnoreHostKey(), + } + client, err := ssh.Dial("tcp", "127.0.0.1:2222", config) + if err != nil { + fmt.Printf("Error dialing: %v\n", err) + os.Exit(1) + } + defer client.Close() + session, err := client.NewSession() + if err != nil { + fmt.Printf("Error creating session: %v\n", err) + os.Exit(1) + } + defer session.Close() + output, err := session.CombinedOutput("echo SSH_OK; hostname") + if err != nil { + fmt.Printf("Error running command: %v\n", err) + os.Exit(1) + } + fmt.Printf("Output: %s\n", string(output)) +} From 5cfc388bb36d6a2c72f2ce169997ba9fd947b4ce Mon Sep 17 00:00:00 2001 From: lyx-tec Date: Thu, 4 Jun 2026 09:00:13 +0800 Subject: [PATCH 3/8] fix: allow underscores in SSH hostname parsing regex --- pkg/remote/connutil.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/remote/connutil.go b/pkg/remote/connutil.go index 89d53f6ae4..873891071d 100644 --- a/pkg/remote/connutil.go +++ b/pkg/remote/connutil.go @@ -26,7 +26,7 @@ import ( "golang.org/x/crypto/ssh" ) -var userHostRe = regexp.MustCompile(`^([a-zA-Z0-9][a-zA-Z0-9._@\\-]*@)?([a-zA-Z0-9][a-zA-Z0-9.-]*)(?::([0-9]+))?$`) +var userHostRe = regexp.MustCompile(`^([a-zA-Z0-9][a-zA-Z0-9._@\\-]*@)?([a-zA-Z0-9][a-zA-Z0-9._-]*)(?::([0-9]+))?$`) func ParseOpts(input string) (*SSHOpts, error) { m := userHostRe.FindStringSubmatch(input) From 8f5bd656820eb3e32b8a9974a265996fb4c81ad8 Mon Sep 17 00:00:00 2001 From: lyx-tec Date: Thu, 4 Jun 2026 19:53:57 +0800 Subject: [PATCH 4/8] feat: convert ProxyCommand to ProxyJump for SSH forwarding patterns When SSH config has ProxyCommand like 'ssh -W %h:%p jump-host', parse and convert it to ProxyJump internally. Falls back to subprocess-based execution for non-convertible ProxyCommands. --- pkg/remote/sshclient.go | 73 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/pkg/remote/sshclient.go b/pkg/remote/sshclient.go index 23983e9eb2..b1ee766ccd 100644 --- a/pkg/remote/sshclient.go +++ b/pkg/remote/sshclient.go @@ -848,6 +848,65 @@ func expandProxyCommand(tmpl string, host string, port string, user string) stri return r.Replace(tmpl) } +// parseProxyCommandAsJump attempts to convert a common ProxyCommand pattern +// (ssh -W %h:%p ) into a ProxyJump host string. +// It returns the jump host and true on success. +// Pattern: ssh [options] -W %h:%p [user@][:port] +func parseProxyCommandAsJump(proxyCmd string) (string, bool) { + args := strings.Fields(proxyCmd) + if len(args) < 3 { + return "", false + } + + sshBin := args[0] + baseName := filepath.Base(sshBin) + if baseName != "ssh" { + return "", false + } + + var jumpHost, jumpUser, jumpPort string + foundW := false + + for i := 1; i < len(args); i++ { + arg := args[i] + switch { + case arg == "-W" && i+1 < len(args): + nextArg := args[i+1] + if !strings.Contains(nextArg, "%h") { + return "", false + } + foundW = true + i++ + case arg == "-p" && i+1 < len(args): + jumpPort = args[i+1] + i++ + case arg == "-l" && i+1 < len(args): + jumpUser = args[i+1] + i++ + case strings.HasPrefix(arg, "-"): + if i+1 < len(args) && !strings.HasPrefix(args[i+1], "-") { + i++ + } + default: + if jumpHost == "" { + jumpHost = arg + } + } + } + + if jumpHost == "" || !foundW { + return "", false + } + + if jumpUser != "" && !strings.Contains(jumpHost, "@") { + jumpHost = jumpUser + "@" + jumpHost + } + if jumpPort != "" && !strings.Contains(jumpHost, ":") { + jumpHost = jumpHost + ":" + jumpPort + } + return jumpHost, true +} + func connectInternal(ctx context.Context, networkAddr string, clientConfig *ssh.ClientConfig, currentClient *ssh.Client, proxyCmd string) (*ssh.Client, error) { var clientConn net.Conn var err error @@ -982,6 +1041,18 @@ func ConnectToClient(connCtx context.Context, opts *SSHOpts, currentClient *ssh. sshKeywords.SshIdentityFile = append(sshKeywords.SshIdentityFile, internalSshConfigKeywords.SshIdentityFile...) sshKeywords.SshIdentityFile = append(sshKeywords.SshIdentityFile, sshConfigKeywords.SshIdentityFile...) + proxyCmd := utilfn.SafeDeref(sshKeywords.SshProxyCommand) + if proxyCmd != "" && len(sshKeywords.SshProxyJump) == 0 { + if jumpHost, ok := parseProxyCommandAsJump(proxyCmd); ok { + blocklogger.Infof(connCtx, "[conndebug] converted proxycommand to proxyjump: %s\n", jumpHost) + sshKeywords.SshProxyJump = []string{jumpHost} + sshKeywords.SshProxyCommand = nil + proxyCmd = "" + } else { + blocklogger.Infof(connCtx, "[conndebug] proxycommand not convertible to proxyjump, using subprocess: %s\n", proxyCmd) + } + } + for _, proxyName := range sshKeywords.SshProxyJump { proxyOpts, err := ParseOpts(proxyName) if err != nil { @@ -1005,7 +1076,7 @@ func ConnectToClient(connCtx context.Context, opts *SSHOpts, currentClient *ssh. if err != nil { return nil, debugInfo.JumpNum, ConnectionError{ConnectionDebugInfo: debugInfo, Err: err} } - proxyCmd := utilfn.SafeDeref(sshKeywords.SshProxyCommand) + proxyCmd = utilfn.SafeDeref(sshKeywords.SshProxyCommand) networkAddr := utilfn.SafeDeref(sshKeywords.SshHostName) + ":" + utilfn.SafeDeref(sshKeywords.SshPort) client, err := connectInternal(connCtx, networkAddr, clientConfig, debugInfo.CurrentClient, proxyCmd) if err != nil { From 34e7eb2dfc8eeceda90ab33a75958879d3414f60 Mon Sep 17 00:00:00 2001 From: lyx-tec Date: Thu, 4 Jun 2026 20:01:36 +0800 Subject: [PATCH 5/8] cleanup: remove proxyCommandConn subprocess approach Remove expandProxyCommand, proxyCommandConn type, and ProxyCommand execution from connectInternal. ProxyCommand is now solely handled by parseProxyCommandAsJump conversion to ProxyJump. --- pkg/remote/sshclient.go | 61 ++--------------------------------------- 1 file changed, 3 insertions(+), 58 deletions(-) diff --git a/pkg/remote/sshclient.go b/pkg/remote/sshclient.go index b1ee766ccd..5c40d9028d 100644 --- a/pkg/remote/sshclient.go +++ b/pkg/remote/sshclient.go @@ -838,16 +838,6 @@ func createClientConfig(connCtx context.Context, sshKeywords *wconfig.ConnKeywor }, nil } -func expandProxyCommand(tmpl string, host string, port string, user string) string { - r := strings.NewReplacer( - "%h", host, - "%p", port, - "%r", user, - "%%", "%", - ) - return r.Replace(tmpl) -} - // parseProxyCommandAsJump attempts to convert a common ProxyCommand pattern // (ssh -W %h:%p ) into a ProxyJump host string. // It returns the jump host and true on success. @@ -907,39 +897,11 @@ func parseProxyCommandAsJump(proxyCmd string) (string, bool) { return jumpHost, true } -func connectInternal(ctx context.Context, networkAddr string, clientConfig *ssh.ClientConfig, currentClient *ssh.Client, proxyCmd string) (*ssh.Client, error) { +func connectInternal(ctx context.Context, networkAddr string, clientConfig *ssh.ClientConfig, currentClient *ssh.Client) (*ssh.Client, error) { var clientConn net.Conn var err error - if proxyCmd != "" { - host, port, _ := net.SplitHostPort(networkAddr) - user := clientConfig.User - expandedCmd := expandProxyCommand(proxyCmd, host, port, user) - blocklogger.Infof(ctx, "[conndebug] ssh proxycommand: %s\n", expandedCmd) - - var cmd *exec.Cmd - if runtime.GOOS == "windows" { - cmd = exec.CommandContext(ctx, "cmd", "/c", expandedCmd) - } else { - cmd = exec.CommandContext(ctx, "sh", "-c", expandedCmd) - } - local, remote := net.Pipe() - cmd.Stdin = remote - cmd.Stdout = remote - cmd.Stderr = remote - - err = cmd.Start() - if err != nil { - remote.Close() - local.Close() - return nil, utilds.MakeSubCodedError(ConnErrCode_Dial, "proxycmd-start", err) - } - clientConn = &proxyCommandConn{ - Conn: local, - cmd: cmd, - remote: remote, - } - } else if currentClient == nil { + if currentClient == nil { d := net.Dialer{Timeout: clientConfig.Timeout} blocklogger.Infof(ctx, "[conndebug] ssh dial %s\n", networkAddr) clientConn, err = d.DialContext(ctx, "tcp", networkAddr) @@ -966,22 +928,6 @@ func connectInternal(ctx context.Context, networkAddr string, clientConfig *ssh. return ssh.NewClient(c, chans, reqs), nil } -// proxyCommandConn wraps a net.Pipe connection with an os/exec Cmd. -// When the connection is closed, the remote pipe end is closed and the -// command process is waited on (reaped) in the background. -type proxyCommandConn struct { - net.Conn - cmd *exec.Cmd - remote net.Conn -} - -func (pcc *proxyCommandConn) Close() error { - pcc.remote.Close() - err := pcc.Conn.Close() - go pcc.cmd.Wait() - return err -} - func ConnectToClient(connCtx context.Context, opts *SSHOpts, currentClient *ssh.Client, jumpNum int32, connFlags *wconfig.ConnKeywords) (*ssh.Client, int32, error) { blocklogger.Infof(connCtx, "[conndebug] ConnectToClient %s (jump:%d)...\n", opts.String(), jumpNum) debugInfo := &ConnectionDebugInfo{ @@ -1076,9 +1022,8 @@ func ConnectToClient(connCtx context.Context, opts *SSHOpts, currentClient *ssh. if err != nil { return nil, debugInfo.JumpNum, ConnectionError{ConnectionDebugInfo: debugInfo, Err: err} } - proxyCmd = utilfn.SafeDeref(sshKeywords.SshProxyCommand) networkAddr := utilfn.SafeDeref(sshKeywords.SshHostName) + ":" + utilfn.SafeDeref(sshKeywords.SshPort) - client, err := connectInternal(connCtx, networkAddr, clientConfig, debugInfo.CurrentClient, proxyCmd) + client, err := connectInternal(connCtx, networkAddr, clientConfig, debugInfo.CurrentClient) if err != nil { return client, debugInfo.JumpNum, ConnectionError{ConnectionDebugInfo: debugInfo, Err: err} } From 3ccf49be20d1479ff8bfe1f024f087aac9598765 Mon Sep 17 00:00:00 2001 From: lyx-tec Date: Thu, 4 Jun 2026 20:10:33 +0800 Subject: [PATCH 6/8] fix: add missing searchInputRef to destructured props --- frontend/app/element/search.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/app/element/search.tsx b/frontend/app/element/search.tsx index 10fd0af0e1..085d18c0cd 100644 --- a/frontend/app/element/search.tsx +++ b/frontend/app/element/search.tsx @@ -29,6 +29,7 @@ const SearchComponent = ({ isOpen: isOpenAtom, focusInput: focusInputAtom, anchorRef, + searchInputRef, offsetX = 10, offsetY = 10, onSearch, From d1c3da26a41f76240405cebea30432295fd7570a Mon Sep 17 00:00:00 2001 From: lyx-tec Date: Thu, 4 Jun 2026 20:35:20 +0800 Subject: [PATCH 7/8] fix: ignore GetStrict error for ProxyCommand (optional), fix misleading log --- pkg/remote/sshclient.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/pkg/remote/sshclient.go b/pkg/remote/sshclient.go index 5c40d9028d..c76bfadb46 100644 --- a/pkg/remote/sshclient.go +++ b/pkg/remote/sshclient.go @@ -995,7 +995,7 @@ func ConnectToClient(connCtx context.Context, opts *SSHOpts, currentClient *ssh. sshKeywords.SshProxyCommand = nil proxyCmd = "" } else { - blocklogger.Infof(connCtx, "[conndebug] proxycommand not convertible to proxyjump, using subprocess: %s\n", proxyCmd) + blocklogger.Infof(connCtx, "[conndebug] proxycommand not convertible to proxyjump, skipping: %s\n", proxyCmd) } } @@ -1173,10 +1173,7 @@ func findSshConfigKeywords(hostPattern string) (connKeywords *wconfig.ConnKeywor sshKeywords.SshProxyJump = append(sshKeywords.SshProxyJump, proxyJumpName) } - proxyCommandRaw, err := WaveSshConfigUserSettings().GetStrict(hostPattern, "ProxyCommand") - if err != nil { - return nil, err - } + proxyCommandRaw, _ := WaveSshConfigUserSettings().GetStrict(hostPattern, "ProxyCommand") proxyCommandClean := trimquotes.TryTrimQuotes(proxyCommandRaw) if proxyCommandClean != "" { sshKeywords.SshProxyCommand = &proxyCommandClean From b42b923cc54f68287e11ccd473dc603402027e4c Mon Sep 17 00:00:00 2001 From: lyx-tec Date: Thu, 4 Jun 2026 21:14:07 +0800 Subject: [PATCH 8/8] chore: remove leftover dev/test files --- Dockerfile.ssh-test | 10 ---------- ssh-connected.png | Bin 76956 -> 0 bytes ssh-test/go.mod | 7 ------- ssh-test/go.sum | 6 ------ ssh-test/main.go | 45 -------------------------------------------- 5 files changed, 68 deletions(-) delete mode 100644 Dockerfile.ssh-test delete mode 100644 ssh-connected.png delete mode 100644 ssh-test/go.mod delete mode 100644 ssh-test/go.sum delete mode 100644 ssh-test/main.go diff --git a/Dockerfile.ssh-test b/Dockerfile.ssh-test deleted file mode 100644 index f28de8636f..0000000000 --- a/Dockerfile.ssh-test +++ /dev/null @@ -1,10 +0,0 @@ -FROM ubuntu:22.04 -RUN apt-get update && apt-get install -y openssh-server && \ - mkdir -p /root/.ssh && \ - echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && \ - echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config && \ - echo "UsePAM no" >> /etc/ssh/sshd_config && \ - echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config && \ - mkdir -p /run/sshd -EXPOSE 22 -CMD ["/usr/sbin/sshd", "-D", "-p", "22"] diff --git a/ssh-connected.png b/ssh-connected.png deleted file mode 100644 index 0261418a758e820c4b3298cdadf86882e7dc57fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76956 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

h7M;eEa8zHvarjdubu++654PZZ0i> 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 diff --git a/ssh-test/go.mod b/ssh-test/go.mod deleted file mode 100644 index 14308a0518..0000000000 --- a/ssh-test/go.mod +++ /dev/null @@ -1,7 +0,0 @@ -module ssh-test - -go 1.25.6 - -require golang.org/x/crypto v0.52.0 - -require golang.org/x/sys v0.45.0 // indirect diff --git a/ssh-test/go.sum b/ssh-test/go.sum deleted file mode 100644 index 3f17939a32..0000000000 --- a/ssh-test/go.sum +++ /dev/null @@ -1,6 +0,0 @@ -golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= -golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= -golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= diff --git a/ssh-test/main.go b/ssh-test/main.go deleted file mode 100644 index c33e3794d7..0000000000 --- a/ssh-test/main.go +++ /dev/null @@ -1,45 +0,0 @@ -package main - -import ( - "fmt" - "golang.org/x/crypto/ssh" - "os" -) - -func main() { - key, err := os.ReadFile(os.ExpandEnv("$USERPROFILE/.ssh/id_ed25519_test")) - if err != nil { - fmt.Printf("Error reading key: %v\n", err) - os.Exit(1) - } - signer, err := ssh.ParsePrivateKey(key) - if err != nil { - fmt.Printf("Error parsing key: %v\n", err) - os.Exit(1) - } - config := &ssh.ClientConfig{ - User: "root", - Auth: []ssh.AuthMethod{ - ssh.PublicKeys(signer), - }, - HostKeyCallback: ssh.InsecureIgnoreHostKey(), - } - client, err := ssh.Dial("tcp", "127.0.0.1:2222", config) - if err != nil { - fmt.Printf("Error dialing: %v\n", err) - os.Exit(1) - } - defer client.Close() - session, err := client.NewSession() - if err != nil { - fmt.Printf("Error creating session: %v\n", err) - os.Exit(1) - } - defer session.Close() - output, err := session.CombinedOutput("echo SSH_OK; hostname") - if err != nil { - fmt.Printf("Error running command: %v\n", err) - os.Exit(1) - } - fmt.Printf("Output: %s\n", string(output)) -}