route.go (861B)
1 package ssh 2 3 import ( 4 "io" 5 "log/slog" 6 7 charmssh "github.com/charmbracelet/ssh" 8 "github.com/charmbracelet/wish" 9 ) 10 11 func routeMiddleware(logger *slog.Logger) wish.Middleware { 12 return func(next charmssh.Handler) charmssh.Handler { 13 return func(sess charmssh.Session) { 14 ip := remoteIP(sess.RemoteAddr()) 15 user := sess.User() 16 17 if len(sess.Command()) > 0 { 18 _, _ = io.WriteString(sess.Stderr(), "remote command execution is disabled on the public interface\n") 19 logger.Info("route decision", 20 "user", user, 21 "ip", ip, 22 "result", "rejected", 23 "command", sess.RawCommand(), 24 ) 25 _ = sess.Exit(126) 26 return 27 } 28 29 logger.Info("route decision", 30 "user", user, 31 "ip", ip, 32 "result", "accepted", 33 ) 34 next(sess) 35 logger.Info("route decision", 36 "user", user, 37 "ip", ip, 38 "result", "exited", 39 ) 40 } 41 } 42 }