feat: 新增网元主机SSH方式检查服务器环境接口
This commit is contained in:
@@ -271,3 +271,86 @@ func (s *NeHostController) Cmd(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 网元主机SSH方式检查服务器环境
|
||||||
|
//
|
||||||
|
// POST /checkBySSH
|
||||||
|
func (s *NeHostController) CheckBySSH(c *gin.Context) {
|
||||||
|
language := ctx.AcceptLanguage(c)
|
||||||
|
var body model.NeHost
|
||||||
|
err := c.ShouldBindBodyWith(&body, binding.JSON)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var connSSH ssh.ConnSSH
|
||||||
|
body.CopyTo(&connSSH)
|
||||||
|
|
||||||
|
// 创建链接SSH客户端
|
||||||
|
client, err := connSSH.NewClient()
|
||||||
|
if err != nil {
|
||||||
|
// 连接主机失败,请检查连接参数后重试
|
||||||
|
c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo")))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer client.Close()
|
||||||
|
|
||||||
|
// 结果信息数据
|
||||||
|
data := map[string]any{
|
||||||
|
"addr": body.Addr, // 服务器地址
|
||||||
|
"kernelName": "-", // 内核名称 -s
|
||||||
|
"nodename": "-", // 网络节点主机名 -n
|
||||||
|
"kernelRelease": "-", // 内核发布版本 -r
|
||||||
|
"machine": "-", // 机器硬件名称 -m
|
||||||
|
"prettyName": "-", // 系统发行版本
|
||||||
|
"sudo": false, // 可提权
|
||||||
|
"sshLink": false, // 可直连
|
||||||
|
}
|
||||||
|
|
||||||
|
// 执行命令 检查系统环境
|
||||||
|
output, err := client.RunCMD("uname -snrm && cat /etc/os-release | grep PRETTY_NAME")
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(200, result.OkData(data))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
output = strings.TrimSuffix(output, "\n")
|
||||||
|
sysInfoArr := strings.SplitN(output, "\n", 2)
|
||||||
|
if len(sysInfoArr) == 2 {
|
||||||
|
// uname -snrm
|
||||||
|
baseInfoArr := strings.SplitN(sysInfoArr[0], " ", 4)
|
||||||
|
data["kernelName"] = baseInfoArr[0]
|
||||||
|
data["nodename"] = baseInfoArr[1]
|
||||||
|
data["kernelRelease"] = baseInfoArr[2]
|
||||||
|
data["machine"] = baseInfoArr[3]
|
||||||
|
// cat /etc/os-release | grep PRETTY_NAME
|
||||||
|
prettyName := sysInfoArr[1]
|
||||||
|
index := strings.Index(prettyName, `"`)
|
||||||
|
if index != -1 {
|
||||||
|
data["prettyName"] = prettyName[index+1 : len(prettyName)-1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 执行命令 检查sudo权限
|
||||||
|
_, err = client.RunCMD("sudo -n uname")
|
||||||
|
if err == nil {
|
||||||
|
data["sudo"] = true
|
||||||
|
} else {
|
||||||
|
data["sudo"] = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 本地免密创建链接直连
|
||||||
|
lcoalConnSSH := ssh.ConnSSH{
|
||||||
|
User: body.User,
|
||||||
|
Addr: body.Addr,
|
||||||
|
Port: body.Port,
|
||||||
|
}
|
||||||
|
lcoalClient, err := lcoalConnSSH.NewClientByLocalPrivate()
|
||||||
|
if err == nil {
|
||||||
|
data["sshLink"] = true
|
||||||
|
} else {
|
||||||
|
data["sshLink"] = false
|
||||||
|
}
|
||||||
|
defer lcoalClient.Close()
|
||||||
|
|
||||||
|
c.JSON(200, result.OkData(data))
|
||||||
|
}
|
||||||
|
|||||||
@@ -114,6 +114,11 @@ func Setup(router *gin.Engine) {
|
|||||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHost", collectlogs.BUSINESS_TYPE_OTHER)),
|
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHost", collectlogs.BUSINESS_TYPE_OTHER)),
|
||||||
controller.NewNeHost.Cmd,
|
controller.NewNeHost.Cmd,
|
||||||
)
|
)
|
||||||
|
neHostGroup.POST("/checkBySSH",
|
||||||
|
middleware.PreAuthorize(nil),
|
||||||
|
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neHost", collectlogs.BUSINESS_TYPE_OTHER)),
|
||||||
|
controller.NewNeHost.CheckBySSH,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 网元主机命令
|
// 网元主机命令
|
||||||
|
|||||||
Reference in New Issue
Block a user