php小編子墨發(fā)現(xiàn)有用戶(hù)反饋在使用Go語(yǔ)言連接到FTP服務(wù)器時(shí)遇到了問(wèn)題,但是使用FileZilla卻可以正常連接。這個(gè)問(wèn)題可能導(dǎo)致一些開(kāi)發(fā)者無(wú)法順利進(jìn)行FTP操作。在本文中,我們將探討可能的原因以及解決辦法,幫助讀者解決這個(gè)連接問(wèn)題,以便能夠順利使用Go語(yǔ)言連接到FTP服務(wù)器。
問(wèn)題內(nèi)容
我有一個(gè)小型 golang 程序,我正在嘗試連接到在 docker 容器中運(yùn)行的 ftp 服務(wù)器 (https://registry.hub.docker.com/r/atmoz/sftp)。
我的機(jī)器是 m1 pro macbook。
使用以下命令啟動(dòng)容器:
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) } }
登錄后復(fù)制
不知何故,我無(wú)法連接到執(zhí)行此代碼的 ftp 服務(wù)器,它會(huì)產(chǎn)生以下輸出:
EOF cannot connect
登錄后復(fù)制
我嘗試使用filezilla 連接到同一個(gè) ftp 服務(wù)器,它工作正常,我能夠成功連接到服務(wù)器。
關(guān)于如何解決此問(wèn)題或進(jìn)一步調(diào)試問(wèn)題有什么想法嗎?謝謝
解決方法
端口 22 通常是 SSH/SFTP,而不是 FTP。請(qǐng)注意,F(xiàn)ileZilla 同時(shí)支持 FTP 和 SFTP。因此,您很可能實(shí)際上是使用 FileZilla 與 SFTP 連接。這兩個(gè)協(xié)議完全不同且不兼容。
Go 似乎有一個(gè)“sftp”包:
https://www.php.cn/link/c6344b0ae32e496be8b1b701e540d566