diff --git a/.gitignore b/.gitignore index f4c98f26..43b1de48 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,11 @@ restagent/upload/ restagent/software/ restagent/database/ restagent/restagent + sshsvc/sshsvc +sshsvc/mmllog/ +sshsvc/mmlhome/ +sshsvc/log/ tools/loadmconf/loadmconf diff --git a/config/etc/default/restconf.yaml b/config/etc/default/restconf.yaml index a758e119..7c9ba04d 100644 --- a/config/etc/default/restconf.yaml +++ b/config/etc/default/restconf.yaml @@ -32,6 +32,7 @@ mml: sleep: 200 user: admin password: admin + mmlHome: ./mmlhome ne: user: root diff --git a/features/mml/mml.go b/features/mml/mml.go index e415135e..4fd33d25 100644 --- a/features/mml/mml.go +++ b/features/mml/mml.go @@ -212,6 +212,7 @@ func PostMMLToOMC(w http.ResponseWriter, r *http.Request) { omcMmlVar := &mmlp.MmlVar{ Version: "16.1.1", Output: mmlp.DefaultFormatType, + MmlHome: config.GetYamlConfig().MML.MmlHome, Limit: 50, User: "", SessionToken: token, diff --git a/lib/mmlp/parse.go b/lib/mmlp/parse.go index 081b36fd..d9a173ac 100644 --- a/lib/mmlp/parse.go +++ b/lib/mmlp/parse.go @@ -7,7 +7,6 @@ import ( "fmt" "math" "net/http" - "os/exec" "regexp" "strconv" "strings" @@ -15,6 +14,7 @@ import ( "ems.agt/lib/dborm" "ems.agt/lib/global" "ems.agt/lib/log" + "ems.agt/lib/run" "github.com/go-resty/resty/v2" ) @@ -38,6 +38,7 @@ type MmlCommand struct { type MmlVar struct { Version string `json:"version"` Output string `json:"output"` + MmlHome string `json:"mmlHome"` Limit int `json:"limit"` User string `json:"user"` SessionToken string `josn:"sessionToken"` @@ -437,8 +438,10 @@ func RunShellCommand(mml *MmlCommand, omcMmlVar *MmlVar, outputJson *dborm.MmlOu default: } } - cmd := exec.Command("/bin/bash", "-c", command) - out, err := cmd.CombinedOutput() + out, err := run.ExecCmd(command, omcMmlVar.MmlHome) + //cmd := exec.Command("/bin/bash", "-c", command) + + //out, err := cmd.CombinedOutput() log.Tracef("Exec output: %v", string(out)) if err != nil { log.Error("exe cmd error: ", err) diff --git a/lib/run/exec_linux.go b/lib/run/exec_linux.go new file mode 100644 index 00000000..33d20d35 --- /dev/null +++ b/lib/run/exec_linux.go @@ -0,0 +1,56 @@ +//go:build linux +// +build linux + +package run + +import ( + "bytes" + "os/exec" + + "ems.agt/lib/log" +) + +func ExecCmd(command, path string) ([]byte, error) { + log.Debug("Exec command:", command) + + cmd := exec.Command("/bin/bash", "-c", command) + cmd.Dir = path + out, err := cmd.CombinedOutput() + if err != nil { + return out, err + } + + return out, nil +} + +func ExecShell(command string) error { + in := bytes.NewBuffer(nil) + cmd := exec.Command("sh") + cmd.Stdin = in + in.WriteString(command) + in.WriteString("exit\n") + if err := cmd.Start(); err != nil { + return err + } + return nil +} + +func ExecOsCmd(command, os string) error { + log.Debugf("Exec %s command:%s", os, command) + + var cmd *exec.Cmd + switch os { + case "Linux": + cmd = exec.Command(command) + case "Windows": + cmd = exec.Command("cmd", "/C", command) + } + + out, err := cmd.CombinedOutput() + log.Tracef("Exec output: %v", string(out)) + if err != nil { + log.Error("exe cmd error: ", err) + return err + } + return nil +} diff --git a/lib/run/exec_windows.go b/lib/run/exec_windows.go new file mode 100644 index 00000000..c79d9a7a --- /dev/null +++ b/lib/run/exec_windows.go @@ -0,0 +1,45 @@ +//go:build windows +// +build windows + +package run + +import ( + "os/exec" + + "ems.agt/lib/log" +) + +func ExecCmd(command, path string) ([]byte, error) { + log.Debug("Exec command:", command) + + cmd := exec.Command("cmd", "/C", command) + cmd.Dir = path + out, err := cmd.CombinedOutput() + log.Tracef("Exec output: %v", string(out)) + if err != nil { + log.Error("exe cmd error: ", err) + return out, err + } + + return out, nil +} + +func ExecOsCmd(command, os string) error { + log.Debugf("Exec %s command:%s", os, command) + + var cmd *exec.Cmd + switch os { + case "Linux": + cmd = exec.Command(command) + case "Windows": + cmd = exec.Command("cmd", "/C", command) + } + + out, err := cmd.CombinedOutput() + log.Tracef("Exec output: %v", string(out)) + if err != nil { + log.Error("exe cmd error: ", err) + return err + } + return nil +} diff --git a/restagent/config/config.go b/restagent/config/config.go index 0e1cb4e0..e26ddabe 100644 --- a/restagent/config/config.go +++ b/restagent/config/config.go @@ -84,6 +84,7 @@ type YamlConfig struct { Sleep int64 `yaml:"sleep"` User string `yaml:"user"` Password string `ymal:"password"` + MmlHome string `yaml:"mmlHome"` } `yaml:"mml"` NE struct { diff --git a/restagent/etc/restconf-t.yaml b/restagent/etc/restconf-t.yaml index 7a2c0e6f..7239429c 100644 --- a/restagent/etc/restconf-t.yaml +++ b/restagent/etc/restconf-t.yaml @@ -32,6 +32,7 @@ mml: sleep: 200 user: admin password: admin + mmlHome: ./mmlhome ne: user: root diff --git a/restagent/etc/restconf.yaml b/restagent/etc/restconf.yaml index 38ea732a..31c2a66d 100644 --- a/restagent/etc/restconf.yaml +++ b/restagent/etc/restconf.yaml @@ -32,6 +32,7 @@ mml: sleep: 200 user: admin password: admin + mmlHome: ./mmlhome ne: user: root diff --git a/sshsvc/config/config.go b/sshsvc/config/config.go index 59450101..b6f3d2a6 100644 --- a/sshsvc/config/config.go +++ b/sshsvc/config/config.go @@ -36,6 +36,7 @@ type YamlConfig struct { MaxConnNum uint8 `yaml:"maxConnNum"` Timeout uint16 `yaml:"timeout"` Session string `yaml:"session"` + MmlHome string `yaml:"mmlHome"` } `yaml:"sshd"` Database struct { diff --git a/sshsvc/etc/sshsvc.yaml b/sshsvc/etc/sshsvc.yaml index 71490afe..1e34f268 100644 --- a/sshsvc/etc/sshsvc.yaml +++ b/sshsvc/etc/sshsvc.yaml @@ -28,6 +28,7 @@ sshd: maxConnNum: 20 timeout: 1800 session: multiple + mmlHome: ./mmlhome database: type: mysql diff --git a/sshsvc/sshsvc.go b/sshsvc/sshsvc.go index ad090204..f85ef237 100644 --- a/sshsvc/sshsvc.go +++ b/sshsvc/sshsvc.go @@ -207,6 +207,7 @@ func handleSSHShell(sshConn *ssh.ServerConn, channel ssh.Channel) { omcMmlVar := &mmlp.MmlVar{ Version: "16.1.1", Output: mmlp.DefaultFormatType, + MmlHome: conf.Sshd.MmlHome, Limit: 50, User: sshConn.User(), SessionToken: fmt.Sprintf("%x", sshConn.SessionID()),