From 066ac2b339805a15c711e5ad2b3a6b81a2ecd9b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Sat, 3 Oct 2026 10:18:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E6=8B=BC=E6=8E=A5=E5=85=BC=E5=AE=B9IPv6?= =?UTF-8?q?=E4=B8=BB=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JoinHostPort替换fmt拼接,IPv6裸地址缺方括号导致拨号失败 --- internal/sftp/client.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/sftp/client.go b/internal/sftp/client.go index c392f7c..93c069e 100644 --- a/internal/sftp/client.go +++ b/internal/sftp/client.go @@ -4,6 +4,7 @@ import ( "fmt" "net" "os" + "strconv" "sync" "time" @@ -157,7 +158,8 @@ func buildClient(config *Config) (*Client, error) { return nil, &ConnectionError{Op: "auth", Err: fmt.Errorf("必须提供密码或密钥文件")} } - addr := fmt.Sprintf("%s:%d", config.Host, config.Port) + // JoinHostPort 保证 IPv6 主机地址被方括号包裹,fmt 拼接对 IPv6 产生非法地址 + addr := net.JoinHostPort(config.Host, strconv.Itoa(config.Port)) // 拨号与认证、SFTP 子系统握手共享同一总超时预算,认证阶段无界挂起由 deadline 掐断 deadline := time.Now().Add(connectTimeout) sshConn, err := net.DialTimeout("tcp", addr, connectTimeout)