无法使用Go连接到FTP服务器,但可以使用FileZilla连接

k0pti3hp  于 2023-01-22  发布在  Go
关注(0)|答案(1)|浏览(157)

我有一个小的Golang程序,我正在尝试连接到运行在Docker容器(https://registry.hub.docker.com/r/atmoz/sftp)中的FTP服务器。
我的电脑是M1 Pro MacBook。
使用以下命令启动容器:docker run -p 22:22 -d atmoz/sftp foo:pass:::upload
Go语言的版本是1.17.13。
程序的代码如下:

package main

import (
    "log"
    "time"

    "github.com/jlaffaye/ftp"
)

func main() {
    c, err := ftp.Dial("localhost:22", ftp.DialWithTimeout(5*time.Second))
    if err != nil {
        log.Fatal(err, " cannot connect")
    }

    err = c.Login("foo", "pass")
    if err != nil {
        log.Fatal(err, "cannot login")
    }

    // Do something with the FTP conn

    if err := c.Quit(); err != nil {
        log.Fatal(err)
    }
}

不知何故,我无法连接到执行此代码的FTP服务器,它导致以下输出:

EOF cannot connect

我尝试使用FileZilla连接到同一个FTP服务器,它工作正常,我能够成功连接到服务器。
关于如何修复这个问题或进一步调试这个问题有什么想法吗?谢谢

s4n0splo

s4n0splo1#

端口22通常是SSH/SFTP,而不是FTP。请注意,FileZilla同时支持FTP和SFTP。因此,您实际上很可能使用FileZilla连接SFTP。这两种协议完全不同且不兼容。
Go好像有个“sftp”包:
https://pkg.go.dev/github.com/pkg/sftp

相关问题