From 7599c0919172b427dcfd19e0b89aaa6da08a3d9f Mon Sep 17 00:00:00 2001 From: dushixiang <798148596@qq.com> Date: Fri, 12 Feb 2021 15:42:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=B5=84=E4=BA=A7=E9=99=84?= =?UTF-8?q?=E5=8A=A0=E5=B1=9E=E6=80=A7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 2 +- pkg/api/session.go | 11 ++- pkg/api/ssh.go | 32 +++--- pkg/api/tunnel.go | 3 +- pkg/global/store.go | 3 +- pkg/model/asset-attribute.go | 2 + web/package.json | 2 +- web/src/components/access/Access.js | 54 +++++++--- web/src/components/asset/AssetModal.js | 130 ------------------------- web/src/components/setting/Setting.js | 103 +------------------- 10 files changed, 72 insertions(+), 270 deletions(-) diff --git a/main.go b/main.go index 716cb45..9ab7820 100644 --- a/main.go +++ b/main.go @@ -22,7 +22,7 @@ import ( "time" ) -const Version = "v0.1.2" +const Version = "v0.2.0" func main() { log.Fatal(Run()) diff --git a/pkg/api/session.go b/pkg/api/session.go index 44138b5..2f3bbc7 100644 --- a/pkg/api/session.go +++ b/pkg/api/session.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "github.com/labstack/echo/v4" + "github.com/pkg/sftp" "github.com/sirupsen/logrus" "io" "io/ioutil" @@ -362,8 +363,16 @@ func SessionLsEndpoint(c echo.Context) error { return errors.New("获取sftp客户端失败") } + if tun.Subject.NextTerminal == nil { + nextTerminal, err := CreateNextTerminalBySession(session) + if err != nil { + return err + } + tun.Subject.NextTerminal = nextTerminal + } + if tun.Subject.NextTerminal.SftpClient == nil { - sftpClient, err := CreateSftpClient(session) + sftpClient, err := sftp.NewClient(tun.Subject.NextTerminal.SshClient) if err != nil { logrus.Errorf("创建sftp客户端失败:%v", err.Error()) return err diff --git a/pkg/api/ssh.go b/pkg/api/ssh.go index 6c6753b..5621233 100644 --- a/pkg/api/ssh.go +++ b/pkg/api/ssh.go @@ -4,9 +4,7 @@ import ( "encoding/json" "github.com/gorilla/websocket" "github.com/labstack/echo/v4" - "github.com/pkg/sftp" "github.com/sirupsen/logrus" - "golang.org/x/crypto/ssh" "net/http" "next-terminal/pkg/global" "next-terminal/pkg/guacd" @@ -97,6 +95,7 @@ func SSHEndpoint(c echo.Context) (err error) { tun := global.Tun{ Protocol: session.Protocol, + Mode: session.Mode, WebSocket: ws, } @@ -242,18 +241,6 @@ func WriteMessage(ws *websocket.Conn, msg Message) error { return err } -func CreateSshClientBySession(session model.Session) (sshClient *ssh.Client, err error) { - - var ( - username = session.Username - password = session.Password - privateKey = session.PrivateKey - passphrase = session.Passphrase - ) - - return term.NewSshClient(session.IP, session.Port, username, password, privateKey, passphrase) -} - func WriteByteMessage(ws *websocket.Conn, p []byte) { err := ws.WriteMessage(websocket.TextMessage, p) if err != nil { @@ -261,11 +248,14 @@ func WriteByteMessage(ws *websocket.Conn, p []byte) { } } -func CreateSftpClient(session model.Session) (sftpClient *sftp.Client, err error) { - sshClient, err := CreateSshClientBySession(session) - if err != nil { - return nil, err - } - - return sftp.NewClient(sshClient) +func CreateNextTerminalBySession(session model.Session) (*term.NextTerminal, error) { + var ( + username = session.Username + password = session.Password + privateKey = session.PrivateKey + passphrase = session.Passphrase + ip = session.IP + port = session.Port + ) + return term.NewNextTerminal(ip, port, username, password, privateKey, passphrase, 10, 10, "") } diff --git a/pkg/api/tunnel.go b/pkg/api/tunnel.go index ddf1510..85563ab 100644 --- a/pkg/api/tunnel.go +++ b/pkg/api/tunnel.go @@ -154,8 +154,9 @@ func TunEndpoint(c echo.Context) error { tun := global.Tun{ Protocol: session.Protocol, - Tunnel: tunnel, + Mode: session.Mode, WebSocket: ws, + Tunnel: tunnel, } if len(session.ConnectionId) == 0 { diff --git a/pkg/global/store.go b/pkg/global/store.go index a418503..28e6ab8 100644 --- a/pkg/global/store.go +++ b/pkg/global/store.go @@ -10,6 +10,7 @@ import ( type Tun struct { Protocol string + Mode string WebSocket *websocket.Conn Tunnel *guacd.Tunnel NextTerminal *term.NextTerminal @@ -25,7 +26,7 @@ func (r *Tun) Close(code int, reason string) { ws := r.WebSocket if ws != nil { - if r.Protocol == "rdp" || r.Protocol == "vnc" { + if r.Mode == "guacd" { err := guacd.NewInstruction("error", reason, strconv.Itoa(code)) _ = ws.WriteMessage(websocket.TextMessage, []byte(err.String())) disconnect := guacd.NewInstruction("disconnect") diff --git a/pkg/model/asset-attribute.go b/pkg/model/asset-attribute.go index 4458de0..cde6091 100644 --- a/pkg/model/asset-attribute.go +++ b/pkg/model/asset-attribute.go @@ -92,6 +92,8 @@ func FindAssetAttrMapByAssetId(assetId string) (map[string]interface{}, error) { parameterNames = RDPParameterNames case "vnc": parameterNames = VNCParameterNames + case "telnet": + parameterNames = TelnetParameterNames } propertiesMap := FindAllPropertiesMap() var attributeMap = make(map[string]interface{}) diff --git a/web/package.json b/web/package.json index f58ee52..d771c9f 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "next-terminal", - "version": "0.1.2", + "version": "0.2.0", "private": true, "dependencies": { "@ant-design/icons": "^4.3.0", diff --git a/web/src/components/access/Access.js b/web/src/components/access/Access.js index 76115fe..5e063c9 100644 --- a/web/src/components/access/Access.js +++ b/web/src/components/access/Access.js @@ -575,23 +575,45 @@ class Access extends Component { - - - - - - Guacd 服务配置