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

Posted

技术标签:

【中文标题】golang FTP PASS(密码)命令在本地工作,但在 ECS 上运行时不起作用【英文标题】:golang FTP PASS (password) command works locally, but doesn't while running on ECS 【发布时间】:2021-09-01 16:37:45 【问题描述】:

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

    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
        

这是来自\vendor\github.com\jlaffaye\ftp\ftp.go 下的我的供应商 pkg 输出为

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

在运行部署在亚马逊 ECS 上的相同服务时, \vendor\github.com\jlaffaye\ftp\ftp.go 下的 vendored pkg 的输出变为

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

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

【问题讨论】:

还想注意err = conn.Login(cfg.Username, pwd) 也运行 FTP USER 命令。这一步在本地和 ECS 上运行时都会通过 使用 if errors.Is(err, io.EOF) 并返回 nil 如果 true 有帮助,但稍后在运行其他 FTP 命令时仍会得到 EOF 【参考方案1】:

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

来自我们 *** 后面的本地机器

# 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.

【讨论】:

以上是关于golang FTP PASS(密码)命令在本地工作,但在 ECS 上运行时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

C 中的 FTP:331 / 530 请指定密码

Linux FTP 命令全集 (序列五)

抓包来看ftp状态码

GoLang执行需要输入密码的命令

linux下FTP常用命令

Linux下FTP实用命令