diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 61 |
1 files changed, 22 insertions, 39 deletions
@@ -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)) } - } |
