Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions session.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"io"
"log/slog"
"net"
"sync"

Expand Down Expand Up @@ -95,7 +96,7 @@ const maxSigBufSize = 128
func DefaultSessionHandler(srv *Server, conn *gossh.ServerConn, newChan gossh.NewChannel, ctx Context) {
ch, reqs, err := newChan.Accept()
if err != nil {
// TODO: trigger event callback
slog.Warn("ssh: failed to accept session channel", "err", err)
return
}
sess := &session{
Expand Down Expand Up @@ -273,9 +274,12 @@ func (sess *session) handleRequests(reqs <-chan *gossh.Request) {

go func() {
if sess.pty != nil && !sess.pty.IsZero() {
// TODO: log error to server
go io.Copy(sess.pty, sess) //nolint: errcheck
go io.Copy(sess, sess.pty) //nolint: errcheck
go func() {
_, _ = io.Copy(sess.pty, sess)
}()
go func() {
_, _ = io.Copy(sess, sess.pty)
}()
}
sess.handler(sess)
_ = sess.Exit(0)
Expand Down Expand Up @@ -412,7 +416,7 @@ func (sess *session) handleRequests(reqs <-chan *gossh.Request) {
_ = req.Reply(ok, nil)
sess.Unlock()
default:
// TODO: debug log
slog.Debug("ssh: unknown session request", "type", req.Type)
_ = req.Reply(false, nil)
}
}
Expand Down
13 changes: 6 additions & 7 deletions tcpip.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package ssh

import (
"io"
"log"
"log/slog"
"net"
"strconv"
"sync"
Expand Down Expand Up @@ -107,7 +107,7 @@ func (h *ForwardedTCPHandler) HandleSSHRequest(ctx Context, srv *Server, req *go
case "tcpip-forward":
var reqPayload remoteForwardRequest
if err := gossh.Unmarshal(req.Payload, &reqPayload); err != nil {
// TODO: log parse failure
slog.Warn("ssh: failed to parse tcpip-forward request", "err", err)
return false, []byte{}
}
if srv.ReversePortForwardingCallback == nil || !srv.ReversePortForwardingCallback(ctx, reqPayload.BindAddr, reqPayload.BindPort) {
Expand All @@ -116,7 +116,7 @@ func (h *ForwardedTCPHandler) HandleSSHRequest(ctx Context, srv *Server, req *go
addr := net.JoinHostPort(reqPayload.BindAddr, strconv.Itoa(int(reqPayload.BindPort)))
ln, err := net.Listen("tcp", addr)
if err != nil {
// TODO: log listen failure
slog.Warn("ssh: reverse port forward listen failed", "addr", addr, "err", err)
return false, []byte{}
}
_, destPortStr, _ := net.SplitHostPort(ln.Addr().String())
Expand All @@ -140,7 +140,7 @@ func (h *ForwardedTCPHandler) HandleSSHRequest(ctx Context, srv *Server, req *go
for {
c, err := ln.Accept()
if err != nil {
// TODO: log accept failure
slog.Debug("ssh: reverse port forward accept failed", "addr", addr, "err", err)
break
}
originAddr, orignPortStr, _ := net.SplitHostPort(c.RemoteAddr().String())
Expand All @@ -154,8 +154,7 @@ func (h *ForwardedTCPHandler) HandleSSHRequest(ctx Context, srv *Server, req *go
go func() {
ch, reqs, err := conn.OpenChannel(forwardedTCPChannelType, payload)
if err != nil {
// TODO: log failure to open channel
log.Println(err)
slog.Warn("ssh: failed to open forwarded channel", "err", err)
_ = c.Close()
return
}
Expand All @@ -181,7 +180,7 @@ func (h *ForwardedTCPHandler) HandleSSHRequest(ctx Context, srv *Server, req *go
case "cancel-tcpip-forward":
var reqPayload remoteForwardCancelRequest
if err := gossh.Unmarshal(req.Payload, &reqPayload); err != nil {
// TODO: log parse failure
slog.Warn("ssh: failed to parse cancel-tcpip-forward request", "err", err)
return false, []byte{}
}
addr := net.JoinHostPort(reqPayload.BindAddr, strconv.Itoa(int(reqPayload.BindPort)))
Expand Down
Loading