【问题标题】:Why does closing a sftp client not close the whole SSH connection为什么关闭 sftp 客户端不会关闭整个 SSH 连接
【发布时间】:2020-09-30 03:45:28
【问题描述】:

我有一个 SFTP 客户端,它通过 ssh 连接并传输文件。我的客户端刚刚向我报告 SFTP 客户端没有关闭已打开的连接。

我检查了我的代码,发现我正在调用 SFTP Close() 函数。我创建了一个示例来测试我的理论

func main() {
    config := &ssh.ClientConfig{
        User: "admin",
        Auth: []ssh.AuthMethod{
            ssh.Password("admin123"),
        },
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
    }
    for {
        client, err := ssh.Dial("tcp", "192.168.0.100:22", config)
        if err != nil {
            log.Fatal("Failed to dial: ", err)
        }
        sftpClient, err := sftp.NewClient(client)
        if err != nil {
            log.Fatalf("SFTP client got error %s", err)
        }

        results, err := sftpClient.Glob("/Users/admin/Desktop/sftp/*")

        if err != nil {
            log.Fatal("GLOB error: ", err)
        }

        for _, r := range results {
            log.Println(r)
        }
        fmt.Println("We are closing connection ..")
        if err := sftpClient.Close(); err != nil {
            log.Fatal(err)
        } 

        time.Sleep(20 * time.Second)
    }

我在fmt.Println 语句之后关闭连接。

我从netstat 检查的确实是连接are not closed

我决定关闭 ssh.Dial 客户端,它工作了,代码稍作改动

   if err := sftpClient.Close(); err != nil {
            log.Fatal(err)
        } else {
            client.Close()
        }

那么 SFTP Close() fn 是做什么的呢?

【问题讨论】:

    标签: go sftp


    【解决方案1】:

    sftpClient.Close() 有什么作用(与 client.Close() 不同?

    它仅关闭通过 SSH 传输的 sftp 连接,但保持该传输打开。

    为什么有用?

    因为您可能希望通过该传输访问 其他 服务——运行 shell 命令或与终端的交互式会话等——而无需重新验证和支付其他设置费用第二次。

    如果没有 Go,我能否看到“在现实生活中”使用此功能?

    当然! In OpenSSH, use the ControlMaster / ControlSocket options 为每个远程目标缓存单个传输并在其上运行多个客户端,您将拥有与 Go 程序在此处执行的相同的行为(运行 OpenSSH sftp 命令,退出它,传输仍将是打开,等待另一个sftp 命令,一个ssh 命令,&c. 去同一个服务器重复使用它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      • 2013-08-10
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多