package main import ( "fmt" "net" "github.com/gliderlabs/ssh" "github.com/magiconair/properties" gossh "golang.org/x/crypto/ssh" ) func main() { // 解析 server.properties conf := properties.MustLoadFile("server.properties", properties.UTF8) 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 := gossh.ParsePrivateKey(privatePEM) if err != nil { panic(fmt.Errorf("不能解析私钥: %v", err)) } // 在指定端口开启服务 address := net.JoinHostPort(SSH_SERVER.Host, SSH_SERVER.Port) 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) if err := s.ListenAndServe(); err != nil { panic(fmt.Errorf("不能启动服务器: %v", err)) } }