登录
首页 >  Golang >  Go问答

无法通过正确的私钥连接到SFTP服务器(连接超时)(使用Golang编程)

来源:stackoverflow

时间:2024-02-08 12:21:16 201浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《无法通过正确的私钥连接到SFTP服务器(连接超时)(使用Golang编程)》,聊聊,我们一起来看看吧!

问题内容

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

正确答案


我终于可以回答我自己的问题了:代码没问题。该问题仅发生在位于防火墙后面的客户服务器上。所以这是网络设置造成的。 为了确保我将 clientconfig 设置更改为 ssh.insecureignorehostkey 并在我的办公室计算机上运行它。连接成功。

clientConfig := &ssh.ClientConfig{
    User:            h.UserName,
    Auth:            []ssh.AuthMethod{ssh.PublicKeys(t.signer)},
    HostKeyCallback: ssh.InsecureIgnoreHostKey(), // ssh.FixedHostKey(hostKey),
    Timeout:         15 * time.Second,
}

附注我知道与这里的一些真正有创意的问题相比,我的答案(以及问题本身)现在看起来很愚蠢......对此感到抱歉。但这有时就是这样的......

终于介绍完啦!小伙伴们,这篇关于《无法通过正确的私钥连接到SFTP服务器(连接超时)(使用Golang编程)》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>