我有一个小的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服务器,它工作正常,我能够成功连接到服务器。
关于如何修复这个问题或进一步调试这个问题有什么想法吗?谢谢
1条答案
按热度按时间s4n0splo1#
端口22通常是SSH/SFTP,而不是FTP。请注意,FileZilla同时支持FTP和SFTP。因此,您实际上很可能使用FileZilla连接SFTP。这两种协议完全不同且不兼容。
Go好像有个“sftp”包:
https://pkg.go.dev/github.com/pkg/sftp