我正在尝试用 Golang 编写一个 sftp 客户端。服务器的所有者需要使用公钥/私钥进行连接。我已经向他们发送了一个公钥(4096 位)并获得了用户名。为了测试连接,我使用我的私钥使用 FileZilla - 它工作正常。但是我的 golang 客户端不工作:ssh.Dial 永远挂起或只是在 ClientConfig 超时时中止......有没有人知道它可能有什么问题(我的代码或周围)?我的代码如下:


keyFile := filepath.Join(dir, "id_rsa")

pkBytes, err := os.ReadFile(keyFile)

if err != nil {

    return err

}

signer, err := ssh.ParsePrivateKeyWithPassphrase(pkBytes, []byte("mysecret"))

if err != nil {

    return err

}


username := "my_username"

sftpDir := "/home/upload/"


keyFile = filepath.Join(dir, "id_rsa.pub")

pkBytes, err = os.ReadFile(keyFile)

if err != nil {

    return err

}


hostKey, _, _, _, err := ssh.ParseAuthorizedKey(pkBytes)

if err != nil {

    return err

}


clientConfig := &ssh.ClientConfig{

    User:            username,

    Auth:            []ssh.AuthMethod{ssh.PublicKeys(signer)},

    HostKeyCallback: ssh.FixedHostKey(hostKey),

    Timeout:         10 * time.Second,

}


conn, err := ssh.Dial("tcp", "sftp.trustyou.com:22", clientConfig)

// here we stop or hang forever.... :-(

if err != nil {

    log.Fatalf("SSH DIAL FAILED:%v", err)

}

defer conn.Close()