背景
我不是 Linux 用户,甚至不是命令行用户,但我负责为公司内部网设置 Linux 服务器。
我在 Windows 10 上的 HyperV 中设置了 CentOS 7 安装。然后我在里面设置了 AMP 堆栈,并通过 Win10 进入 CentOS 的网络访问互联网。我让 CentOS Web 服务器拥有自己的 IP 地址,并且可以从外部网络访问。
我现在正在尝试让 FTP 工作,这样当我将 VM 移动到其最终的真实服务器(不在我的桌面上)时,我可以通过 FTP 将文件移动到它。我已经按照以 为中心的大量教程进行操作vsftp
。我已经安装了它,我已经添加了 FTP 访问权限firewall-cmd
。我弄乱了iptables
,然后发现 CentOS 显然使用firewalld
,而不是iptables
?
设置
在/etc/vsftp/vsftp.conf
:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.userlist
内容/etc/vsftpd.userlist
:
tester
状态vsftpd
:
问题
当我尝试通过 FTP 连接时,我看到:
问题
我究竟做错了什么?
答案1
鉴于您的 FTP 客户端显示“连接被拒绝”,我相信您的防火墙配置正确,但 vsftpd 根本没有监听您尝试连接的地址 ( 192.168.15.101
)。当服务未在目标服务器上运行或未监听您尝试连接的地址时,就会出现该消息。正如我在这两种情况下的测试服务器所见:
[root@host ~]# telnet 192.168.122.173 21
Trying 192.168.122.173...
telnet: connect to address 192.168.122.173: Connection refused
如果是防火墙问题,则错误消息将是“没有到主机的路由”:
[root@host ~]# telnet 192.168.122.173 21
Trying 192.168.122.173...
telnet: connect to address 192.168.122.173: No route to host
有几件事我想确认一下:
vsftpd 是否正在监听该地址?如果您看到以下内容,那么它应该正在监听所有可用的 IPv4 和 IPv6 地址 - 如果您看到其他内容,那么这可能是您的问题:
[root@ftpsrv ~]# ss -pln|grep -i ftp tcp LISTEN 0 32 -->:::21<-- :::* users:(("vsftpd",pid=1636,fd=3))
您连接的地址和 vsftpd 所在的服务器是同一个吗?
ip ad
会告诉你 - 再三检查永远不会有坏处。您还可以尝试从运行 vsftpd 的服务器远程登录到它,以确保它在本地正常工作。
正如@Sven 提到的,SFTP 是另一个选项,尽管它不使用 vsftpd,而是使用 OpenSSH 服务器。它实际上在许多系统中默认启用 - 只需检查您的/etc/ssh/sshd_config
文件中是否存在类似以下内容:
Subsystem sftp /usr/libexec/openssh/sftp-server
man 8 sftp-server
可以为您提供更多相关信息。