From 01658b066717fd3d13178b145d305dc0d6ce01fe Mon Sep 17 00:00:00 2001 From: runoneall Date: Thu, 11 Sep 2025 19:08:12 +0800 Subject: update shell --- main.go | 61 ++++++++++++++++++++++--------------------------------------- 1 file changed, 22 insertions(+), 39 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 1bbe285..c407351 100644 --- a/main.go +++ b/main.go @@ -4,64 +4,47 @@ import ( "fmt" "net" + "github.com/gliderlabs/ssh" "github.com/magiconair/properties" - "golang.org/x/crypto/ssh" + gossh "golang.org/x/crypto/ssh" ) func main() { // 解析 server.properties conf := properties.MustLoadFile("server.properties", properties.UTF8) - var SSH_SERVER struct { - Host string - Port string - User string - Pass string - config *ssh.ServerConfig - } - - SSH_SERVER.Host = conf.MustGetString("server-ip") - SSH_SERVER.Port = conf.MustGetString("server-port") - SSH_SERVER.User = conf.MustGetString("term-user") - SSH_SERVER.Pass = conf.MustGetString("term-pass") - - // 创建 ssh 密码认证 - SSH_SERVER.config = &ssh.ServerConfig{ - PasswordCallback: func(conn ssh.ConnMetadata, password []byte) (*ssh.Permissions, error) { - if conn.User() == SSH_SERVER.User && string(password) == SSH_SERVER.Pass { - return nil, nil - } - - return nil, ssh.ErrNoAuth - }, + SSH_SERVER := struct { + Host string + Port string + User string + Pass string + }{ + Host: conf.MustGetString("server-ip"), + Port: conf.MustGetString("server-port"), + User: conf.MustGetString("term-user"), + Pass: conf.MustGetString("term-pass"), } // 创建 ssh 服务器密钥 - privateKeySigner, err := ssh.ParsePrivateKey(privatePEM) + privateKeySigner, err := gossh.ParsePrivateKey(privatePEM) if err != nil { panic(fmt.Errorf("不能解析私钥: %v", err)) } - SSH_SERVER.config.AddHostKey(privateKeySigner) - // 在指定端口开启服务 address := net.JoinHostPort(SSH_SERVER.Host, SSH_SERVER.Port) - listener, err := net.Listen("tcp", address) - if err != nil { - panic(fmt.Errorf("不能在 %s 上创建服务: %v", address, err)) + s := &ssh.Server{ + Addr: address, + Handler: shell, + PasswordHandler: func(ctx ssh.Context, password string) bool { + return ctx.User() == SSH_SERVER.User && password == SSH_SERVER.Pass + }, } + s.AddHostKey(privateKeySigner) fmt.Println("Server Address:", address) - - // 连接到系统 shell - for { - conn, err := listener.Accept() - if err != nil { - fmt.Println("Can not accept connection:", err) - } - - go shell(conn, SSH_SERVER.config) + if err := s.ListenAndServe(); err != nil { + panic(fmt.Errorf("不能启动服务器: %v", err)) } - } -- cgit v1.2.3