php小編子墨發現有用戶反饋在使用Go語言連接到FTP服務器時遇到了問題,但是使用FileZilla卻可以正常連接。這個問題可能導致一些開發者無法順利進行FTP操作。在本文中,我們將探討可能的原因以及解決辦法,幫助讀者解決這個連接問題,以便能夠順利使用Go語言連接到FTP服務器。
問題內容
我有一個小型 golang 程序,我正在嘗試連接到在 docker 容器中運行的 ftp 服務器 (https://registry.hub.docker.com/r/atmoz/sftp)。
我的機器是 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 服務器,它工作正常,我能夠成功連接到服務器。
關于如何解決此問題或進一步調試問題有什么想法嗎?謝謝
解決方法
端口 22 通常是 SSH/SFTP,而不是 FTP。請注意,FileZilla 同時支持 FTP 和 SFTP。因此,您很可能實際上是使用 FileZilla 與 SFTP 連接。這兩個協議完全不同且不兼容。
Go 似乎有一個“sftp”包:
https://www.php.cn/link/c6344b0ae32e496be8b1b701e540d566