golang FTP PASS(密码)命令在本地工作,但在 ECS 上运行时不起作用



我有一个go服务器,它使用github.com/jlaffaye/ftp库从远程服务器获取FTP文件。我首先得到连接

conn, err := ftp.DialTimeout(cfg.Host+cfg.Port, time.Second*15)
if err != nil {
return nil, fmt.Errorf("ftp dial error: %v", err)
}

之后,我尝试使用登录

err = conn.Login(cfg.Username, pwd)
if err != nil {
return nil, fmt.Errorf("ftp login error: %v", err)
}

我在本地运行时成功登录。在查看的输出时也证实了这一点

code, msg, err := c.cmd(StatusLoggedIn, "PASS %s", password)
log.Printf("pass, code %d, msg %s, err %v", code, msg, err)
if err != nil {
return err
}

它来自我的供应商pkgvendorgithub.comjlaffayeftpftp.go输出为

2021/06/16 23:12:45 pass, code 230, msg User xxxx logged in, err <nil>

在运行部署在amazon ECS上的相同服务时,卖方pkg在vendorgithub.comjlaffayeftpftp.go下的输出变为

2021/06/16 20:24:28 pass, code 0, msg , err EOF

有人能推荐一个可能导致这种情况的想法吗?

在亚马逊ECS上运行时,ftp服务器似乎无法访问,因为ec2机器的IP地址在ftp服务器中没有列入白名单。用telnet做了一些调试

从我们的VPN 后面的本地机器

# telnet ftp.xxxxxxxxx.net 21
Trying xx.xxx.xxx.xxx...
Connected to xxxxxxxxxxx.net.
Escape character is '^]'.
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [xx.xxx.xxx.xxx]
USER xxxx
331 Password required for xxxx
PASS xxxxxxxxx
230 User xxx logged in

来自不同VPC 中的EC2机器

Connected to ftp.xxxxxxxxxxxx.net.
Escape character is '^]'.
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [xx.xxx.xxx.xxx]
USER xxxx
331 Password required for xxxx
PASS xxxxxxxx
Connection closed by foreign host.

相关内容

  • 没有找到相关文章

最新更新