微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

golang FTP PASS密码命令在本地有效,但在 ECS 上运行时无效

如何解决golang FTP PASS密码命令在本地有效,但在 ECS 上运行时无效

我有一个使用 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,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,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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?