【发布时间】: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 是做什么的呢?
【问题讨论】: