feat: ssh支持免认证连接
This commit is contained in:
@@ -167,8 +167,7 @@ func (s *NeHostController) Remove(c *gin.Context) {
|
|||||||
func (s *NeHostController) Test(c *gin.Context) {
|
func (s *NeHostController) Test(c *gin.Context) {
|
||||||
language := ctx.AcceptLanguage(c)
|
language := ctx.AcceptLanguage(c)
|
||||||
var body model.NeHost
|
var body model.NeHost
|
||||||
err := c.ShouldBindBodyWith(&body, binding.JSON)
|
if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil {
|
||||||
if err != nil {
|
|
||||||
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -176,8 +175,13 @@ func (s *NeHostController) Test(c *gin.Context) {
|
|||||||
if body.HostType == "ssh" {
|
if body.HostType == "ssh" {
|
||||||
var connSSH ssh.ConnSSH
|
var connSSH ssh.ConnSSH
|
||||||
body.CopyTo(&connSSH)
|
body.CopyTo(&connSSH)
|
||||||
|
var client *ssh.ConnSSH
|
||||||
client, err := connSSH.NewClient()
|
var err error
|
||||||
|
if body.AuthMode == "2" {
|
||||||
|
client, err = connSSH.NewClientByLocalPrivate()
|
||||||
|
} else {
|
||||||
|
client, err = connSSH.NewClient()
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// 连接主机失败,请检查连接参数后重试
|
// 连接主机失败,请检查连接参数后重试
|
||||||
c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo")))
|
c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo")))
|
||||||
@@ -213,8 +217,7 @@ func (s *NeHostController) Cmd(c *gin.Context) {
|
|||||||
HostID string `json:"hostId" binding:"required"` // 主机ID
|
HostID string `json:"hostId" binding:"required"` // 主机ID
|
||||||
Cmd string `json:"cmd" binding:"required"` // 执行命令
|
Cmd string `json:"cmd" binding:"required"` // 执行命令
|
||||||
}
|
}
|
||||||
err := c.ShouldBindBodyWith(&body, binding.JSON)
|
if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil {
|
||||||
if err != nil {
|
|
||||||
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -230,8 +233,13 @@ func (s *NeHostController) Cmd(c *gin.Context) {
|
|||||||
if neHost.HostType == "ssh" {
|
if neHost.HostType == "ssh" {
|
||||||
var connSSH ssh.ConnSSH
|
var connSSH ssh.ConnSSH
|
||||||
neHost.CopyTo(&connSSH)
|
neHost.CopyTo(&connSSH)
|
||||||
|
var client *ssh.ConnSSH
|
||||||
client, err := connSSH.NewClient()
|
var err error
|
||||||
|
if neHost.AuthMode == "2" {
|
||||||
|
client, err = connSSH.NewClientByLocalPrivate()
|
||||||
|
} else {
|
||||||
|
client, err = connSSH.NewClient()
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// 连接主机失败,请检查连接参数后重试
|
// 连接主机失败,请检查连接参数后重试
|
||||||
c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo")))
|
c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo")))
|
||||||
@@ -278,17 +286,21 @@ func (s *NeHostController) Cmd(c *gin.Context) {
|
|||||||
func (s *NeHostController) CheckBySSH(c *gin.Context) {
|
func (s *NeHostController) CheckBySSH(c *gin.Context) {
|
||||||
language := ctx.AcceptLanguage(c)
|
language := ctx.AcceptLanguage(c)
|
||||||
var body model.NeHost
|
var body model.NeHost
|
||||||
err := c.ShouldBindBodyWith(&body, binding.JSON)
|
if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil {
|
||||||
if err != nil {
|
|
||||||
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var connSSH ssh.ConnSSH
|
var connSSH ssh.ConnSSH
|
||||||
body.CopyTo(&connSSH)
|
body.CopyTo(&connSSH)
|
||||||
|
|
||||||
// 创建链接SSH客户端
|
// 创建链接SSH客户端
|
||||||
client, err := connSSH.NewClient()
|
var client *ssh.ConnSSH
|
||||||
|
var err error
|
||||||
|
if body.AuthMode == "2" {
|
||||||
|
client, err = connSSH.NewClientByLocalPrivate()
|
||||||
|
} else {
|
||||||
|
client, err = connSSH.NewClient()
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// 连接主机失败,请检查连接参数后重试
|
// 连接主机失败,请检查连接参数后重试
|
||||||
c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo")))
|
c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo")))
|
||||||
@@ -339,18 +351,22 @@ func (s *NeHostController) CheckBySSH(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 本地免密创建链接直连
|
// 本地免密创建链接直连
|
||||||
lcoalConnSSH := ssh.ConnSSH{
|
if body.AuthMode == "2" {
|
||||||
User: body.User,
|
|
||||||
Addr: body.Addr,
|
|
||||||
Port: body.Port,
|
|
||||||
}
|
|
||||||
lcoalClient, err := lcoalConnSSH.NewClientByLocalPrivate()
|
|
||||||
if err == nil {
|
|
||||||
data["sshLink"] = true
|
data["sshLink"] = true
|
||||||
} else {
|
} else {
|
||||||
data["sshLink"] = false
|
lcoalConnSSH := ssh.ConnSSH{
|
||||||
|
User: body.User,
|
||||||
|
Addr: body.Addr,
|
||||||
|
Port: body.Port,
|
||||||
|
}
|
||||||
|
lcoalClient, err := lcoalConnSSH.NewClientByLocalPrivate()
|
||||||
|
if err == nil {
|
||||||
|
data["sshLink"] = true
|
||||||
|
defer lcoalClient.Close()
|
||||||
|
} else {
|
||||||
|
data["sshLink"] = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
defer lcoalClient.Close()
|
|
||||||
|
|
||||||
c.JSON(200, result.OkData(data))
|
c.JSON(200, result.OkData(data))
|
||||||
}
|
}
|
||||||
@@ -361,8 +377,7 @@ func (s *NeHostController) CheckBySSH(c *gin.Context) {
|
|||||||
func (s *NeHostController) AuthorizedBySSH(c *gin.Context) {
|
func (s *NeHostController) AuthorizedBySSH(c *gin.Context) {
|
||||||
language := ctx.AcceptLanguage(c)
|
language := ctx.AcceptLanguage(c)
|
||||||
var body model.NeHost
|
var body model.NeHost
|
||||||
err := c.ShouldBindBodyWith(&body, binding.JSON)
|
if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil || body.AuthMode == "2" {
|
||||||
if err != nil {
|
|
||||||
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -377,8 +392,8 @@ func (s *NeHostController) AuthorizedBySSH(c *gin.Context) {
|
|||||||
lcoalClient, err := lcoalConnSSH.NewClientByLocalPrivate()
|
lcoalClient, err := lcoalConnSSH.NewClientByLocalPrivate()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
sshLink = true
|
sshLink = true
|
||||||
|
defer lcoalClient.Close()
|
||||||
}
|
}
|
||||||
defer lcoalClient.Close()
|
|
||||||
if sshLink {
|
if sshLink {
|
||||||
// 连接主机成功,无需重复免密授权认证
|
// 连接主机成功,无需重复免密授权认证
|
||||||
c.JSON(200, result.OkMsg(i18n.TKey(language, "neHost.okBySSHLink")))
|
c.JSON(200, result.OkMsg(i18n.TKey(language, "neHost.okBySSHLink")))
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ type NeHost struct {
|
|||||||
Addr string `json:"addr" gorm:"column:addr" binding:"required"` // 主机地址
|
Addr string `json:"addr" gorm:"column:addr" binding:"required"` // 主机地址
|
||||||
Port int64 `json:"port" gorm:"column:port" binding:"required,number,max=65535,min=1"` // SSH端口
|
Port int64 `json:"port" gorm:"column:port" binding:"required,number,max=65535,min=1"` // SSH端口
|
||||||
User string `json:"user" gorm:"column:user" binding:"required"` // 主机用户名
|
User string `json:"user" gorm:"column:user" binding:"required"` // 主机用户名
|
||||||
AuthMode string `json:"authMode" gorm:"column:auth_mode" binding:"oneof=0 1"` // 认证模式(0密码 1主机私钥)
|
AuthMode string `json:"authMode" gorm:"column:auth_mode" binding:"oneof=0 1 2"` // 认证模式(0密码 1主机私钥 2已免密)
|
||||||
Password string `json:"password" gorm:"column:password"` // 认证密码
|
Password string `json:"password" gorm:"column:password"` // 认证密码
|
||||||
PrivateKey string `json:"privateKey" gorm:"column:private_key"` // 认证私钥
|
PrivateKey string `json:"privateKey" gorm:"column:private_key"` // 认证私钥
|
||||||
PassPhrase string `json:"passPhrase" gorm:"column:pass_phrase"` // 认证私钥密码
|
PassPhrase string `json:"passPhrase" gorm:"column:pass_phrase"` // 认证私钥密码
|
||||||
|
|||||||
@@ -332,7 +332,13 @@ func (r *NeInfoImpl) NeRunSSHclient(neType, neId string) (*ssh.ConnSSH, error) {
|
|||||||
|
|
||||||
var connSSH ssh.ConnSSH
|
var connSSH ssh.ConnSSH
|
||||||
neHost.CopyTo(&connSSH)
|
neHost.CopyTo(&connSSH)
|
||||||
client, err := connSSH.NewClient()
|
var client *ssh.ConnSSH
|
||||||
|
var err error
|
||||||
|
if neHost.AuthMode == "2" {
|
||||||
|
client, err = connSSH.NewClientByLocalPrivate()
|
||||||
|
} else {
|
||||||
|
client, err = connSSH.NewClient()
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("NeRunSSHclient NewClient err => %s", err.Error())
|
logger.Errorf("NeRunSSHclient NewClient err => %s", err.Error())
|
||||||
return nil, fmt.Errorf("neinfo ssh client new err")
|
return nil, fmt.Errorf("neinfo ssh client new err")
|
||||||
|
|||||||
@@ -144,8 +144,14 @@ func (s *WSController) SSH(c *gin.Context) {
|
|||||||
// 创建链接SSH客户端
|
// 创建链接SSH客户端
|
||||||
var connSSH ssh.ConnSSH
|
var connSSH ssh.ConnSSH
|
||||||
neHost.CopyTo(&connSSH)
|
neHost.CopyTo(&connSSH)
|
||||||
client, err := connSSH.NewClient()
|
var client *ssh.ConnSSH
|
||||||
if err != nil {
|
var clientErr error
|
||||||
|
if neHost.AuthMode == "2" {
|
||||||
|
client, clientErr = connSSH.NewClientByLocalPrivate()
|
||||||
|
} else {
|
||||||
|
client, clientErr = connSSH.NewClient()
|
||||||
|
}
|
||||||
|
if clientErr != nil {
|
||||||
// 连接主机失败,请检查连接参数后重试
|
// 连接主机失败,请检查连接参数后重试
|
||||||
c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo")))
|
c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo")))
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user