diff --git a/Dockerfile b/Dockerfile index 01f14a98afb4df90b38f616d9af02434855a6d10..e36fcce94a93e06f526210b6130e4fbb4402fc2d 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 ce5da7a60fff9b608ac5a2c1ad22c8d5df64af15..4910cebc5014fc5155181ba7f7f786250d25ce49 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() }