From fb62f1e105015f1c9e84a926dc1f6c20b716069e Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Thu, 12 Jun 2025 13:39:01 +0800 Subject: [PATCH] feat: ipv6 connect --- internal/pkg/core/deployer/providers/ssh/ssh.go | 12 +++++++----- internal/pkg/core/notifier/providers/email/email.go | 9 +++++---- internal/workflow/node-processor/monitor_node.go | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/internal/pkg/core/deployer/providers/ssh/ssh.go b/internal/pkg/core/deployer/providers/ssh/ssh.go index 782b1332..2d6aa8fd 100644 --- a/internal/pkg/core/deployer/providers/ssh/ssh.go +++ b/internal/pkg/core/deployer/providers/ssh/ssh.go @@ -8,6 +8,7 @@ import ( "net" "os" "path/filepath" + "strconv" "strings" "github.com/pkg/sftp" @@ -139,9 +140,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE var jumpConn net.Conn // 第一个连接是主机发起,后续通过跳板机发起 if jumpClient == nil { - jumpConn, err = net.Dial("tcp", fmt.Sprintf("%s:%d", jumpServerConf.SshHost, jumpServerConf.SshPort)) + jumpConn, err = net.Dial("tcp", net.JoinHostPort(jumpServerConf.SshHost, strconv.Itoa(int(jumpServerConf.SshPort)))) } else { - jumpConn, err = jumpClient.DialContext(ctx, "tcp", fmt.Sprintf("%s:%d", jumpServerConf.SshHost, jumpServerConf.SshPort)) + jumpConn, err = jumpClient.DialContext(ctx, "tcp", net.JoinHostPort(jumpServerConf.SshHost, strconv.Itoa(int(jumpServerConf.SshPort)))) } if err != nil { return nil, fmt.Errorf("failed to connect to jump server [%d]: %w", i+1, err) @@ -168,13 +169,13 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPE } // 通过跳板机发起 TCP 连接到目标服务器 - targetConn, err = jumpClient.DialContext(ctx, "tcp", fmt.Sprintf("%s:%d", d.config.SshHost, d.config.SshPort)) + targetConn, err = jumpClient.DialContext(ctx, "tcp", net.JoinHostPort(d.config.SshHost, strconv.Itoa(int(d.config.SshPort)))) if err != nil { return nil, fmt.Errorf("failed to connect to target server: %w", err) } } else { // 直接发起 TCP 连接到目标服务器 - targetConn, err = net.Dial("tcp", fmt.Sprintf("%s:%d", d.config.SshHost, d.config.SshPort)) + targetConn, err = net.Dial("tcp", net.JoinHostPort(d.config.SshHost, strconv.Itoa(int(d.config.SshPort)))) if err != nil { return nil, fmt.Errorf("failed to connect to target server: %w", err) } @@ -340,7 +341,8 @@ func createSshClient(conn net.Conn, host string, port int32, authMethod string, return nil, fmt.Errorf("unsupported auth method '%s'", authMethod) } - sshConn, chans, reqs, err := ssh.NewClientConn(conn, fmt.Sprintf("%s:%d", host, port), &ssh.ClientConfig{ + addr := net.JoinHostPort(host, strconv.Itoa(int(port))) + sshConn, chans, reqs, err := ssh.NewClientConn(conn, addr, &ssh.ClientConfig{ User: username, Auth: authentications, HostKeyCallback: ssh.InsecureIgnoreHostKey(), diff --git a/internal/pkg/core/notifier/providers/email/email.go b/internal/pkg/core/notifier/providers/email/email.go index 8a9de3f2..bd7e8880 100644 --- a/internal/pkg/core/notifier/providers/email/email.go +++ b/internal/pkg/core/notifier/providers/email/email.go @@ -3,9 +3,10 @@ package email import ( "context" "crypto/tls" - "fmt" "log/slog" + "net" "net/smtp" + "strconv" "github.com/domodwyer/mailyak/v3" @@ -68,12 +69,12 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s var smtpAddr string if n.config.SmtpPort == 0 { if n.config.SmtpTls { - smtpAddr = fmt.Sprintf("%s:465", n.config.SmtpHost) + smtpAddr = net.JoinHostPort(n.config.SmtpHost, "465") } else { - smtpAddr = fmt.Sprintf("%s:25", n.config.SmtpHost) + smtpAddr = net.JoinHostPort(n.config.SmtpHost, "25") } } else { - smtpAddr = fmt.Sprintf("%s:%d", n.config.SmtpHost, n.config.SmtpPort) + smtpAddr = net.JoinHostPort(n.config.SmtpHost, strconv.Itoa(int(n.config.SmtpPort))) } var yak *mailyak.MailYak diff --git a/internal/workflow/node-processor/monitor_node.go b/internal/workflow/node-processor/monitor_node.go index 8e3d3f87..b1c4ca53 100644 --- a/internal/workflow/node-processor/monitor_node.go +++ b/internal/workflow/node-processor/monitor_node.go @@ -35,7 +35,7 @@ func (n *monitorNode) Process(ctx context.Context) error { nodeCfg := n.node.GetConfigForMonitor() n.logger.Info("ready to monitor certificate ...", slog.Any("config", nodeCfg)) - targetAddr := net.JoinHostPort(nodeCfg.Host, fmt.Sprintf("%d", nodeCfg.Port)) + targetAddr := net.JoinHostPort(nodeCfg.Host, strconv.Itoa(int(nodeCfg.Port))) if nodeCfg.Port == 0 { targetAddr = net.JoinHostPort(nodeCfg.Host, "443") }