summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go61
1 files changed, 22 insertions, 39 deletions
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))
}
-
}