feat: 移除ssh客户端改为本地bash

This commit is contained in:
TsMask
2025-05-13 17:22:04 +08:00
parent 552abb411c
commit f7f63f1950
21 changed files with 526 additions and 590 deletions

View File

@@ -6,11 +6,11 @@ import (
"strings"
"time"
"be.ems/src/framework/cmd"
"be.ems/src/framework/i18n"
"be.ems/src/framework/logger"
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
neService "be.ems/src/modules/network_element/service"
"be.ems/src/modules/tool/service"
wsService "be.ems/src/modules/ws/service"
@@ -140,14 +140,14 @@ func (s *IPerfController) Run(c *gin.Context) {
}
// 网元主机的SSH客户端
sshClient, err := neService.NewNeInfo.NeRunSSHClient(query.NeType, query.NeId)
if err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
return
}
defer sshClient.Close()
// sshClient, err := neService.NewNeInfo.NeRunSSHClient(query.NeType, query.NeId)
// if err != nil {
// c.JSON(200, resp.ErrMsg(err.Error()))
// return
// }
// defer sshClient.Close()
// ssh连接会话
clientSession, err := sshClient.NewClientSession(query.Cols, query.Rows)
clientSession, err := cmd.NewClientSession(query.Cols, query.Rows)
if err != nil {
c.JSON(200, resp.ErrMsg("neinfo ssh client session new err"))
return

View File

@@ -5,11 +5,11 @@ import (
"fmt"
"time"
"be.ems/src/framework/cmd"
"be.ems/src/framework/i18n"
"be.ems/src/framework/logger"
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
neService "be.ems/src/modules/network_element/service"
"be.ems/src/modules/tool/model"
"be.ems/src/modules/tool/service"
wsService "be.ems/src/modules/ws/service"
@@ -175,14 +175,14 @@ func (s *PingController) Run(c *gin.Context) {
}
// 网元主机的SSH客户端
sshClient, err := neService.NewNeInfo.NeRunSSHClient(query.NeType, query.NeId)
if err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
return
}
defer sshClient.Close()
// sshClient, err := neService.NewNeInfo.NeRunSSHClient(query.NeType, query.NeId)
// if err != nil {
// c.JSON(200, resp.ErrMsg(err.Error()))
// return
// }
// defer sshClient.Close()
// ssh连接会话
clientSession, err := sshClient.NewClientSession(query.Cols, query.Rows)
clientSession, err := cmd.NewClientSession(query.Cols, query.Rows)
if err != nil {
c.JSON(200, resp.ErrMsg("neinfo ssh client session new err"))
return

View File

@@ -4,14 +4,14 @@ import (
"encoding/json"
"fmt"
"io"
"os"
"strings"
"time"
"be.ems/src/framework/cmd"
"be.ems/src/framework/config"
"be.ems/src/framework/logger"
"be.ems/src/framework/resp"
"be.ems/src/framework/ssh"
neService "be.ems/src/modules/network_element/service"
wsModel "be.ems/src/modules/ws/model"
)
@@ -26,20 +26,20 @@ func (s *IPerf) Version(meType, neId, version string) (string, error) {
if version != "V2" && version != "V3" {
return "", fmt.Errorf("iperf version is required V2 or V3")
}
cmd := "iperf3 --version"
cmdStr := "iperf3 --version"
if version == "V2" {
cmd = "iperf -v"
cmdStr = "iperf -v"
}
// 网元主机的SSH客户端
sshClient, err := neService.NewNeInfo.NeRunSSHClient(meType, neId)
if err != nil {
return "", err
}
defer sshClient.Close()
// sshClient, err := neService.NewNeInfo.NeRunSSHClient(meType, neId)
// if err != nil {
// return "", err
// }
// defer sshClient.Close()
// 检查是否安装iperf
output, err := sshClient.RunCMD(cmd)
output, err := cmd.Exec(cmdStr)
if err != nil {
if version == "V2" && strings.HasSuffix(err.Error(), "status 1") { // V2 版本
return strings.TrimSpace(output), nil
@@ -56,28 +56,28 @@ func (s *IPerf) Install(meType, neId, version string) error {
}
// 网元主机的SSH客户端
sshClient, err := neService.NewNeInfo.NeRunSSHClient(meType, neId)
if err != nil {
return err
}
defer sshClient.Close()
// 网元主机的SSH客户端进行文件传输
sftpClient, err := sshClient.NewClientSFTP()
if err != nil {
return err
}
defer sftpClient.Close()
// sshClient, err := neService.NewNeInfo.NeRunSSHClient(meType, neId)
// if err != nil {
// return err
// }
// defer sshClient.Close()
// // 网元主机的SSH客户端进行文件传输
// sftpClient, err := sshClient.NewClientSFTP()
// if err != nil {
// return err
// }
// defer sftpClient.Close()
nePath := "/tmp"
depPkg := "sudo dpkg -i"
depDir := "assets/dependency/iperf3/deb"
// 检查平台类型
if _, err := sshClient.RunCMD("sudo dpkg --version"); err == nil {
if _, err := cmd.Exec("sudo dpkg --version"); err == nil {
depPkg = "sudo dpkg -i"
depDir = "assets/dependency/iperf3/deb"
// sudo apt remove iperf3 libiperf0 libsctp1 libsctp-dev lksctp-tools
} else if _, err := sshClient.RunCMD("sudo yum --version"); err == nil {
} else if _, err := cmd.Exec("sudo yum --version"); err == nil {
depPkg = "sudo rpm -Uvh --nosignature --reinstall --force"
depDir = "assets/dependency/iperf3/rpm"
// yum remove iperf3 iperf3-help.noarch
@@ -106,7 +106,7 @@ func (s *IPerf) Install(meType, neId, version string) error {
defer localFile.Close()
// 创建远程文件
remotePath := fmt.Sprintf("%s/%s", nePath, d.Name())
remoteFile, err := sftpClient.Client.Create(remotePath)
remoteFile, err := os.Create(remotePath)
if err != nil {
return fmt.Errorf("iperf %s file remote error", version)
}
@@ -120,13 +120,12 @@ func (s *IPerf) Install(meType, neId, version string) error {
// 删除软件包
defer func() {
pkgRemove := fmt.Sprintf("sudo rm %s", strings.Join(neFilePaths, " "))
sshClient.RunCMD(pkgRemove)
cmd.Execf("sudo rm %s", strings.Join(neFilePaths, " "))
}()
// 安装软件包
pkgInstall := fmt.Sprintf("%s %s", depPkg, strings.Join(neFilePaths, " "))
if _, err := sshClient.RunCMD(pkgInstall); err != nil {
_, err = cmd.Execf("%s %s", depPkg, strings.Join(neFilePaths, " "))
if err != nil {
return fmt.Errorf("iperf %s install error", version)
}
return err
@@ -160,13 +159,13 @@ func (s *IPerf) Run(client *wsModel.WSClient, reqMsg wsModel.WSRequest) {
var command string
command, err = s.parseOptions(reqMsg.Data)
if command != "" && err == nil {
sshClientSession := client.ChildConn.(*ssh.SSHClientSession)
_, err = sshClientSession.Write(command)
localClientSession := client.ChildConn.(*cmd.LocalClientSession)
_, err = localClientSession.Write(command)
}
case "ctrl-c":
// 模拟按下 Ctrl+C
sshClientSession := client.ChildConn.(*ssh.SSHClientSession)
_, err = sshClientSession.Write("\u0003\n")
localClientSession := client.ChildConn.(*cmd.LocalClientSession)
_, err = localClientSession.Write("\u0003\n")
case "resize":
// 会话窗口重置
msgByte, _ := json.Marshal(reqMsg.Data)
@@ -176,8 +175,8 @@ func (s *IPerf) Run(client *wsModel.WSClient, reqMsg wsModel.WSRequest) {
}
err = json.Unmarshal(msgByte, &data)
if err == nil {
sshClientSession := client.ChildConn.(*ssh.SSHClientSession)
err = sshClientSession.Session.WindowChange(data.Rows, data.Cols)
localClientSession := client.ChildConn.(*cmd.LocalClientSession)
localClientSession.WindowChange(data.Cols, data.Rows)
}
default:
err = fmt.Errorf("message type %s not supported", reqMsg.Type)

View File

@@ -7,9 +7,9 @@ import (
"strings"
"time"
"be.ems/src/framework/cmd"
"be.ems/src/framework/logger"
"be.ems/src/framework/resp"
"be.ems/src/framework/ssh"
neService "be.ems/src/modules/network_element/service"
"be.ems/src/modules/tool/model"
wsModel "be.ems/src/modules/ws/model"
@@ -173,13 +173,17 @@ func (s *Ping) Run(client *wsModel.WSClient, reqMsg wsModel.WSRequest) {
var command string
command, err = s.parseOptions(reqMsg.Data)
if command != "" && err == nil {
sshClientSession := client.ChildConn.(*ssh.SSHClientSession)
_, err = sshClientSession.Write(command)
// sshClientSession := client.ChildConn.(*ssh.SSHClientSession)
// _, err = sshClientSession.Write(command)
localClientSession := client.ChildConn.(*cmd.LocalClientSession)
_, err = localClientSession.Write(command)
}
case "ctrl-c":
// 模拟按下 Ctrl+C
sshClientSession := client.ChildConn.(*ssh.SSHClientSession)
_, err = sshClientSession.Write("\u0003\n")
// sshClientSession := client.ChildConn.(*ssh.SSHClientSession)
// _, err = sshClientSession.Write("\u0003\n")
localClientSession := client.ChildConn.(*cmd.LocalClientSession)
_, err = localClientSession.Write("\u0003\n")
case "resize":
// 会话窗口重置
msgByte, _ := json.Marshal(reqMsg.Data)
@@ -189,8 +193,10 @@ func (s *Ping) Run(client *wsModel.WSClient, reqMsg wsModel.WSRequest) {
}
err = json.Unmarshal(msgByte, &data)
if err == nil {
sshClientSession := client.ChildConn.(*ssh.SSHClientSession)
err = sshClientSession.Session.WindowChange(data.Rows, data.Cols)
// sshClientSession := client.ChildConn.(*ssh.SSHClientSession)
// err = sshClientSession.Session.WindowChange(data.Rows, data.Cols)
localClientSession := client.ChildConn.(*cmd.LocalClientSession)
localClientSession.WindowChange(data.Cols, data.Rows)
}
default:
err = fmt.Errorf("message type %s not supported", reqMsg.Type)