我正在尝试用 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()