为了账号安全,请及时绑定邮箱和手机立即绑定

使用正确的私钥 (Golang) 连接到 SFTP 服务器失败(超时)

使用正确的私钥 (Golang) 连接到 SFTP 服务器失败(超时)

Go
幕布斯6054654 2023-02-28 20:24:54
我正在尝试用 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()
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

我终于可以回答我自己的问题了:代码没问题。该问题仅发生在我们位于防火墙后面的客户服务器上。因此,网络设置对此负责。为了确保我将 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,

}

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


查看完整回答
反对 回复 2023-02-28
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

package main


import (

    "github.com/alessiosavi/GoGPUtils/helper"

    stringutils "github.com/alessiosavi/GoGPUtils/string"

    "github.com/alessiosavi/GoSFTPtoS3"

    "io/ioutil"

    "log"

    "strings"

)


func main() {

    log.SetFlags(log.LstdFlags | log.Lshortfile | log.Lmicroseconds)


    var sftpConf = &GoSFTPtoS3.SFTPConf{

        Host:     "localhost", // FIXME: Change host and user

        User:     "alessiosavi",

        Password: "",

        Port:     22,

        Bucket:   "bucket-ftp",

        Timeout:  50,

        PrivKey:  "",

    }

    // FIXME: Use your key

    file, err := ioutil.ReadFile("/home/alessiosavi/.ssh/mykey.pem")

    if err != nil {

        panic(err)

    }

    sftpConf.PrivKey = string(file)


    conn, err := sftpConf.NewConn()

    defer conn.Close()

    list, err := conn.List("/tmp")

    if err != nil {

        panic(err)

    }


    log.Println(helper.MarshalIndent(list))


}


查看完整回答
反对 回复 2023-02-28
  • 2 回答
  • 0 关注
  • 355 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信