From f24c1b71152dc6b162be1ff26d30119f5d27ed0d Mon Sep 17 00:00:00 2001 From: Frank Sauerburger <frank@sauerburger.com> Date: Wed, 31 Jan 2024 10:03:06 +0100 Subject: [PATCH] Improve logging and connection handling --- Dockerfile | 3 ++- main.go | 24 +++++++++++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 01f14a9..e36fcce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,4 +7,5 @@ RUN go build -ldflags="-w -s" -o /go/bin/sshway FROM alpine:3.18 COPY --from=builder /go/bin/sshway /bin/sshway -CMD ["/bin/sshway"] \ No newline at end of file +EXPOSE 2222 +CMD ["/bin/sshway"] diff --git a/main.go b/main.go index ce5da7a..4910ceb 100644 --- a/main.go +++ b/main.go @@ -67,17 +67,20 @@ func main() { fmt.Printf("Listening on %s\n", localAddr) defer server.Close() + client_counter := 0 + for { connection, err := server.Accept() if err != nil { log.Fatalf("Error accepting local client: %v\n", err) } - fmt.Printf("client connected %s\n", connection.RemoteAddr().String()) - go handleClient(connection) + log.Printf("%6d New connection from client: %s\n", client_counter, connection.RemoteAddr().String()) + go handleClient(client_counter, connection) + client_counter++ } } -func handleClient(localSock net.Conn) { +func handleClient(client_counter int, localSock net.Conn) { defer localSock.Close() config := &ssh.ClientConfig{ @@ -92,21 +95,24 @@ func handleClient(localSock net.Conn) { conn, err := ssh.Dial("tcp", sshHost, config) if err != nil { - log.Printf("SSH connection failed: %v\n", err) + log.Printf("%6d SSH connection failed: %v\n", client_counter, err) return } - defer conn.Close() forwardClient, err := conn.Dial("tcp", remoteAddr) if err != nil { - log.Printf("Port forward failed: %v\n", err) + log.Printf("%6d Port forward failed: %v\n", client_counter, err) + conn.Close() return } go func() { - io.Copy(localSock, forwardClient) + io.Copy(forwardClient, localSock) + log.Printf("%6d Local client disconnected\n", client_counter) + conn.Close() }() - io.Copy(forwardClient, localSock) - log.Printf("Disconnected: %v\n", localSock) + io.Copy(localSock, forwardClient) + log.Printf("%6d Remote socket closed for local client\n", client_counter) + conn.Close() } -- GitLab