终端版本
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy
1
2
3
4
5

# 前言

服务器与开发环境文件传输是常规操作了,随着 Window 对 Linux 的支持越来越密切,熟悉 WSL 是刻不容缓的事情,那么现在就来搭建个 FTP 吧。

# 安装 vsftpd

sudo apt install vsftpd
1

# 配置 vsftpd

接着在修改配置文件为如下,保持退出即可。

vim /etc/vsftpd.conf

listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
pasv_enable=Yes
pasv_min_port=10000
pasv_max_port=10100
allow_writeable_chroot=YES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

现在已经安装配置好 ftp 啦。

因为 Ubuntu 的内置防火墙默认情况下是阻止 FTP 通信的,但通过下面的命令可以在 UFW 中创建一个异常以允许流量:接着可以修改防火墙规则,如下:

sudo ufw allow from any to any port 20,21,10000:10100 proto tcp
1

接着重启 vsftp 来加载信配置

sudo service vsftpd restart
1

后面如果每次启动 wsl 都要重新使用命令 service vsftpd start 来启动 ftp 服务,systemctl 命令在 wsl 中用不了,所以只能用 service 命令来每次都启动了。

# 创建用于 ftp 访问的用户

上面已经将 ftp 所有工作都完成了,但是如果想在其他终端访问该 ftp 的话当然还需要一个账号密码来实现终端间的沟通吧。

所以下面我们需要在 Linux 上创建一个新用户,用于 ftp 使用。

sudo useradd -m ftptest
sudo passwd ftptest
# 然后输入密码
New password:
Retype new password:
passwd: password updated successfully
1
2
3
4
5
6

接下来验证下用户创建是否成功,所以在 ftptest 文件夹下创建一个文件 FTP-TEST,当使用 ftp 登录到 ftptest 时可见 d 到该文件。

sudo bash -c "echo FTP TESTING > /home/ftptest/FTP-TEST"
1

然后在 Linux 上连接 FTP 服务器

root@LAPTOP-PN3TTOB5:~# ftp 127.0.0.1
Connected to 172.29.xx.yy.
220 (vsFTPd 3.0.5)
Name (172.29.xx.yy:root): ftptest
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||10086|)
150 Here comes the directory listing.
-rw-r--r--    1 0        0              12 Dec 11 23:20 FTP-TEST
226 Directory send OK.
ftp>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

可见,输入 ls 命令 即可返回:FTP-TEST

# 获取 Linux IP 的方法

也可以使用 Linux 实际 IP 来访问

获取 Linux 当前 IP 地址方式如下:

eth0 为 Linux 的 IP

# 方法一:
root@LAPTOP-PN3TTOB5:~# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:9e:14:4c brd ff:ff:ff:ff:ff:ff
    inet 172.29.xx.yy/20 brd 172.29.31.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe9e:144c/64 scope link
       valid_lft forever preferred_lft forever

# 方法二:
root@LAPTOP-PN3TTOB5:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.29.xx.yy  netmask 255.255.240.0  broadcast 172.29.31.255
        inet6 fe80::215:5dff:fe9e:144c  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:9e:14:4c  txqueuelen 1000  (Ethernet)
        RX packets 15313  bytes 36004054 (36.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7839  bytes 713823 (713.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 67  bytes 3986 (3.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 67  bytes 3986 (3.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 方法三:
root@LAPTOP-PN3TTOB5:~# hostname -I
172.29.xx.yy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

# Window FTP 连接 Linux

一切准备就绪,接下来就可以在 Window 使用 FTP 软件与 Linux 沟通连接了。

本人是使用开源软件 FileZilla 进行连接的

  • 打开软件后新建站点;

  • 协议:FTP-文本传输协议

  • 主机:172.29.xx.yy(Linux IP)

  • 端口号: 21

  • 加密方式:如果可用,使用显式的 FTP over TSL(默认)

  • 登录类型:正常

  • 用户:ftptest

  • 密码:

然后点连接,Bingo~大功告成~