【发布时间】:2022-10-17 21:29:02
【问题描述】:
我正在尝试用 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()
【问题讨论】: