mirror of
https://gitee.com/dromara/mayfly-go
synced 2026-01-04 13:46:37 +08:00
refactor: 达梦ssh连接调整
This commit is contained in:
@@ -105,6 +105,10 @@ func (m *machineAppImpl) Save(ctx context.Context, me *entity.Machine, tagIds ..
|
||||
if err == nil && oldMachine.Id != me.Id {
|
||||
return errorx.NewBiz("该机器信息已存在")
|
||||
}
|
||||
// 如果调整了ssh username等会查不到旧数据,故需要根据id获取旧信息将code赋值给标签进行关联
|
||||
if oldMachine.Code == "" {
|
||||
oldMachine, _ = m.GetById(new(entity.Machine), me.Id)
|
||||
}
|
||||
|
||||
// 关闭连接
|
||||
mcm.DeleteCli(me.Id)
|
||||
|
||||
@@ -106,6 +106,6 @@ func (c *Cli) Close() {
|
||||
}
|
||||
if c.Info.SshTunnelMachine != nil {
|
||||
logx.Infof("关闭机器的隧道信息: machineId=%d, sshTunnelMachineId=%d", c.Info.Id, c.Info.SshTunnelMachine.Id)
|
||||
CloseSshTunnelMachine(int(c.Info.SshTunnelMachine.Id), c.Info.Id)
|
||||
CloseSshTunnelMachine(int(c.Info.SshTunnelMachine.Id), c.Info.GetTunnelId())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,10 @@ func (m *MachineInfo) UseSshTunnel() bool {
|
||||
return m.SshTunnelMachine != nil
|
||||
}
|
||||
|
||||
func (m *MachineInfo) GetTunnelId() string {
|
||||
return fmt.Sprintf("machine:%d", m.Id)
|
||||
}
|
||||
|
||||
// 连接
|
||||
func (mi *MachineInfo) Conn() (*Cli, error) {
|
||||
logx.Infof("[%s]机器连接:%s:%d", mi.Name, mi.Ip, mi.Port)
|
||||
@@ -46,7 +50,7 @@ func (mi *MachineInfo) Conn() (*Cli, error) {
|
||||
sshClient, err := GetSshClient(mi)
|
||||
if err != nil {
|
||||
if mi.UseSshTunnel() {
|
||||
CloseSshTunnelMachine(int(mi.SshTunnelMachine.Id), mi.Id)
|
||||
CloseSshTunnelMachine(int(mi.SshTunnelMachine.Id), mi.GetTunnelId())
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
@@ -72,7 +76,7 @@ func (me *MachineInfo) IfUseSshTunnelChangeIpPort() error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
exposeIp, exposePort, err := sshTunnelMachine.OpenSshTunnel(me.Id, me.Ip, me.Port)
|
||||
exposeIp, exposePort, err := sshTunnelMachine.OpenSshTunnel(me.GetTunnelId(), me.Ip, me.Port)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -68,10 +68,10 @@ type SshTunnelMachine struct {
|
||||
machineId int // 隧道机器id
|
||||
SshClient *ssh.Client
|
||||
mutex sync.Mutex
|
||||
tunnels map[uint64]*Tunnel // 机器id -> 隧道
|
||||
tunnels map[string]*Tunnel // 隧道id -> 隧道
|
||||
}
|
||||
|
||||
func (stm *SshTunnelMachine) OpenSshTunnel(id uint64, ip string, port int) (exposedIp string, exposedPort int, err error) {
|
||||
func (stm *SshTunnelMachine) OpenSshTunnel(id string, ip string, port int) (exposedIp string, exposedPort int, err error) {
|
||||
stm.mutex.Lock()
|
||||
defer stm.mutex.Unlock()
|
||||
|
||||
@@ -154,7 +154,7 @@ func GetSshTunnelMachine(machineId int, getMachine func(uint64) (*MachineInfo, e
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
sshTunnelMachine = &SshTunnelMachine{SshClient: sshClient, machineId: machineId, tunnels: map[uint64]*Tunnel{}}
|
||||
sshTunnelMachine = &SshTunnelMachine{SshClient: sshClient, machineId: machineId, tunnels: map[string]*Tunnel{}}
|
||||
|
||||
logx.Infof("初次连接ssh隧道机器[%d][%s:%d]", machineId, me.Ip, me.Port)
|
||||
sshTunnelMachines[machineId] = sshTunnelMachine
|
||||
@@ -168,7 +168,7 @@ func GetSshTunnelMachine(machineId int, getMachine func(uint64) (*MachineInfo, e
|
||||
}
|
||||
|
||||
// 关闭ssh隧道机器的指定隧道
|
||||
func CloseSshTunnelMachine(machineId int, tunnelId uint64) {
|
||||
func CloseSshTunnelMachine(machineId int, tunnelId string) {
|
||||
sshTunnelMachine := sshTunnelMachines[machineId]
|
||||
if sshTunnelMachine == nil {
|
||||
return
|
||||
@@ -184,7 +184,7 @@ func CloseSshTunnelMachine(machineId int, tunnelId uint64) {
|
||||
}
|
||||
|
||||
type Tunnel struct {
|
||||
id uint64 // 唯一标识
|
||||
id string // 唯一标识
|
||||
machineId int // 隧道机器id
|
||||
localHost string // 本地监听地址
|
||||
localPort int // 本地端口
|
||||
@@ -237,7 +237,7 @@ func (r *Tunnel) Close() {
|
||||
}
|
||||
r.remoteConnections = nil
|
||||
_ = r.listener.Close()
|
||||
logx.Debugf("隧道 %d 监听器关闭", r.id)
|
||||
logx.Debugf("隧道 %s 监听器关闭", r.id)
|
||||
}
|
||||
|
||||
func copyConn(writer, reader net.Conn) {
|
||||
|
||||
Reference in New Issue
Block a user