diff --git a/agent/app/service/ssh.go b/agent/app/service/ssh.go index 8ab5ca28b..2e498ce0d 100644 --- a/agent/app/service/ssh.go +++ b/agent/app/service/ssh.go @@ -3,6 +3,7 @@ package service import ( "bytes" "encoding/base64" + "encoding/json" "fmt" "os" "os/user" @@ -208,6 +209,10 @@ func (u *SSHService) Update(req dto.SSHUpdate) error { if err := NewIFirewallService().UpdatePortRule(ruleItem); err != nil { global.LOG.Errorf("reset firewall rules %s -> %s failed, err: %v", req.OldValue, req.NewValue, err) } + newPort, _ := strconv.Atoi(req.NewValue) + if err := updateLocalConn(uint(newPort)); err != nil { + global.LOG.Errorf("update local conn for terminal failed, err: %v", err) + } } _, _ = cmd.RunDefaultWithStdoutBashCf("%s systemctl restart %s", sudo, serviceName) @@ -738,3 +743,28 @@ func loadEncryptioMode(content string) string { } return "" } + +func updateLocalConn(newPort uint) error { + conn, _ := settingRepo.GetValueByKey("LocalSSHConn") + if len(conn) == 0 { + return nil + } + connItem, err := encrypt.StringDecrypt(conn) + if err != nil { + return err + } + var data dto.SSHConnData + if err := json.Unmarshal([]byte(connItem), &data); err != nil { + return err + } + data.Port = newPort + connNew, err := json.Marshal(data) + if err != nil { + return err + } + connNewItem, err := encrypt.StringEncrypt(string(connNew)) + if err != nil { + return err + } + return settingRepo.Update("LocalSSHConn", connNewItem) +}