From 12493b8ef2f72e6296b0ffa9ab40484f2d64ceb8 Mon Sep 17 00:00:00 2001 From: Mike Wyatt Date: Tue, 22 Oct 2024 20:50:03 -0300 Subject: [PATCH] more changes --- src/client/main.go | 6 ++-- .../internal_ssh.go => go_ssh_ext/main.go} | 2 +- src/{nvrh_ssh => go_ssh_ext}/ssh_config.go | 2 +- src/nvrh_internal_ssh/main.go | 31 +++++++++++++++++-- src/ssh_tunnel_info/main.go | 30 ------------------ 5 files changed, 34 insertions(+), 37 deletions(-) rename src/{nvrh_ssh/internal_ssh.go => go_ssh_ext/main.go} (99%) rename src/{nvrh_ssh => go_ssh_ext}/ssh_config.go (95%) diff --git a/src/client/main.go b/src/client/main.go index 6fb480f..9d2dde4 100644 --- a/src/client/main.go +++ b/src/client/main.go @@ -16,12 +16,12 @@ import ( "github.com/urfave/cli/v2" "nvrh/src/context" + "nvrh/src/go_ssh_ext" "nvrh/src/logger" "nvrh/src/nvim_helpers" "nvrh/src/nvrh_base_ssh" "nvrh/src/nvrh_binary_ssh" "nvrh/src/nvrh_internal_ssh" - "nvrh/src/nvrh_ssh" "nvrh/src/ssh_endpoint" "nvrh/src/ssh_tunnel_info" ) @@ -115,12 +115,12 @@ var CliClientOpenCommand = cli.Command{ BrowserScriptPath: fmt.Sprintf("/tmp/nvrh-browser-%s", sessionId), - SshPath: c.String("ssh-path"), + SshPath: sshPath, Debug: isDebug, } if sshPath == "internal" { - sshClient, err := nvrh_ssh.GetSshClientForEndpoint(endpoint) + sshClient, err := go_ssh_ext.GetSshClientForEndpoint(endpoint) if err != nil { return err } diff --git a/src/nvrh_ssh/internal_ssh.go b/src/go_ssh_ext/main.go similarity index 99% rename from src/nvrh_ssh/internal_ssh.go rename to src/go_ssh_ext/main.go index f8ca764..e056f30 100644 --- a/src/nvrh_ssh/internal_ssh.go +++ b/src/go_ssh_ext/main.go @@ -1,4 +1,4 @@ -package nvrh_ssh +package go_ssh_ext import ( "fmt" diff --git a/src/nvrh_ssh/ssh_config.go b/src/go_ssh_ext/ssh_config.go similarity index 95% rename from src/nvrh_ssh/ssh_config.go rename to src/go_ssh_ext/ssh_config.go index 9e49fb7..a094b6f 100644 --- a/src/nvrh_ssh/ssh_config.go +++ b/src/go_ssh_ext/ssh_config.go @@ -1,4 +1,4 @@ -package nvrh_ssh +package go_ssh_ext import ( "log/slog" diff --git a/src/nvrh_internal_ssh/main.go b/src/nvrh_internal_ssh/main.go index 80e0ef6..f08d784 100644 --- a/src/nvrh_internal_ssh/main.go +++ b/src/nvrh_internal_ssh/main.go @@ -61,7 +61,7 @@ func (c *NvrhInternalSshClient) TunnelSocket(tunnelInfo *ssh_tunnel_info.SshTunn } // Listen on the local Unix socket - localListener, err := tunnelInfo.LocalListener(tunnelInfo.Public) + localListener, err := LocalListenerFromTunnelInfo(tunnelInfo) if err != nil { slog.Error("Failed to listen on local socket", "err", err) return @@ -87,7 +87,7 @@ func (c *NvrhInternalSshClient) TunnelSocket(tunnelInfo *ssh_tunnel_info.SshTunn } // Establish a connection to the remote socket via SSH - remoteConn, err := tunnelInfo.RemoteListener(c.SshClient) + remoteConn, err := RemoteListenerFromTunnelInfo(tunnelInfo, c.SshClient) if err != nil { slog.Error("Failed to dial remote socket", "err", err) localConn.Close() @@ -110,3 +110,30 @@ func handleConnection(localConn net.Conn, remoteConn net.Conn) { // Copy data from remote to local io.Copy(localConn, remoteConn) } + +func LocalListenerFromTunnelInfo(ti *ssh_tunnel_info.SshTunnelInfo) (net.Listener, error) { + switch ti.Mode { + case "unix": + return net.Listen("unix", ti.LocalSocket) + case "port": + ip := "localhost" + if ti.Public { + ip = "0.0.0.0" + } + + return net.Listen("tcp", fmt.Sprintf("%s:%s", ip, ti.LocalSocket)) + } + + return nil, fmt.Errorf("Invalid mode: %s", ti.Mode) +} + +func RemoteListenerFromTunnelInfo(ti *ssh_tunnel_info.SshTunnelInfo, sshClient *ssh.Client) (net.Conn, error) { + switch ti.Mode { + case "unix": + return sshClient.Dial("unix", ti.RemoteSocket) + case "port": + return sshClient.Dial("tcp", fmt.Sprintf("localhost:%s", ti.RemoteSocket)) + } + + return nil, fmt.Errorf("Invalid mode: %s", ti.Mode) +} diff --git a/src/ssh_tunnel_info/main.go b/src/ssh_tunnel_info/main.go index f8483ba..1d58195 100644 --- a/src/ssh_tunnel_info/main.go +++ b/src/ssh_tunnel_info/main.go @@ -2,9 +2,6 @@ package ssh_tunnel_info import ( "fmt" - "net" - - "golang.org/x/crypto/ssh" ) type SshTunnelInfo struct { @@ -14,33 +11,6 @@ type SshTunnelInfo struct { Public bool } -func (ti *SshTunnelInfo) LocalListener(public bool) (net.Listener, error) { - switch ti.Mode { - case "unix": - return net.Listen("unix", ti.LocalSocket) - case "port": - ip := "localhost" - if public { - ip = "0.0.0.0" - } - - return net.Listen("tcp", fmt.Sprintf("%s:%s", ip, ti.LocalSocket)) - } - - return nil, fmt.Errorf("Invalid mode: %s", ti.Mode) -} - -func (ti *SshTunnelInfo) RemoteListener(sshClient *ssh.Client) (net.Conn, error) { - switch ti.Mode { - case "unix": - return sshClient.Dial("unix", ti.RemoteSocket) - case "port": - return sshClient.Dial("tcp", fmt.Sprintf("localhost:%s", ti.RemoteSocket)) - } - - return nil, fmt.Errorf("Invalid mode: %s", ti.Mode) -} - func (ti *SshTunnelInfo) BoundToIp() string { if ti.Mode == "unix" { return fmt.Sprintf("%s:%s", ti.LocalSocket, ti.RemoteSocket)