Linux搭建SFTP服务器
点击展开更新日志
2025
04-14
这篇文章诞生了!
nexttime
会有些什么呢(❁´◡`❁)
¶源起
这篇文章的起因是在用了1年半的阿里云,跑了网站之后,突然想到如果服务器到期了数据咋办,所以决定在本地备份一份,到时候换机器重新部署即可。
最初是准备使用 rsync
的方式从服务器同步到本地的,但是主力机用的是 Win11,rsync
不太友好,所以选择了更加方便一点的 SFTP。
我的服务器版本为 Cent7
,如果有些地方和你的发行版存在出入,请通过“问题+发行版”的形式使用谷歌查询。
¶SFTP 配置
¶修改SSH配置
登录服务器修改SSH配置文件
1 | vim /etc/ssh/sshd_config |
修改/新增以下内容:
1 | # 注释旧配置 |
❓: 为什么
Subsystem sftp
修改修改,可以使用默认的吗?【结果来自 Deepseek,供参考】Subsystem sftp 表示定义 SFTP 服务模块, sftp_server 是外部 SFTP 服务进程路径,依赖外部进程。修改为
internal-sftp
,使用 openssh 内置的 sftp 实现,优势:
- 直接集成在 SSH 守护进程中,减少了潜在的攻击面
- 若需限制用户仅能访问特定目录(如
/data/backup
),必须使用internal-sftp
- Cent8及Ubuntu20.04后的新版本openssh默认推荐
internal-sftp
,。
重启 SSH 服务
1 | systemctl restart sshd |
¶创建 SFTP 用户与目录
创建用户与用户组(群组和用户名可以自定义):
1 | groupadd sftp_group |
配置目录权限:
1 | mkdir -p /data/backup/sftp |
¶【‼️重要】放行安全组
-
阿里云控制台添加“入方向”规则,端口
22333/TCP
,22 端口默认已放行; -
服务器防火墙放行(如果开启了本地防火墙)
1
2firewall-cmd --zone=public --add-port=22333/tcp --permanent
firewall-cmd --reload
做完之后一定先在本地尝试新端口 SSH 能否正常登录,确认没有问题后再退出。
¶如果修改了端口登录不上了怎么办
如果在修改端口之后就迫不及待退出了,然后发现无法登录(服务器防火墙没放行/关闭),难道只能重装了吗?!倒也不是没有办法,幸好在决定重装之前问了阿里云客服:
- 如果开启了SSH密钥登陆且关闭了密码登录:先重置密码(会重新开启密码登录)然后重新登录即可;
- 如果并没有关闭密码登录,可以从云平台使用 VNC 登录。
至此,就可以使用创建的账户登录进行 SFTP 同步了,但~是,真的就结束了吗。
¶SSH 密钥登录
起因是发现我的阿里云被尝试暴力破解,于是决定更换为私钥登录。这部分其实很早之前就做了,并非做 SFTP 的时候才想起,自然,上面新创的用户最好也用 SSH 私钥登录。
¶环境准备
Linux 自带了工具,Windows 建议安装 Git,使用 Git Bash
工具。
¶创建密钥对
打开 Git Bash,执行:
1 | ssh-keygen -t ed25519 -f "ed25519_alicloud" -C "<MAIL>" |
-t
指定密钥类型,rsa|ed25519,ed25519是一种更新、相比rsa更安全的算法,目前新版本ssh-keygen命令默认就是这个类型-f
指定密钥文件名,默认为id_rsa
-c
添加注释说明,一般用邮箱
执行之后会要求输入密码加密,可以选择用密码(不需要太复杂但一定要记住!),也可以直接回车不要密码。
¶拷贝至服务器
有两种方式可以将本地的公钥上传到服务器指定位置:
¶使用命令
1 | ssh-copy-id -i ~/.ssh/ed25519_alicloud.pub <USERNAME>@<HOST> |
会自动将公钥写入服务器 ~/.ssh/authorized_keys
文件中。
¶手动添加
-
查看公钥内容
1
cat ~/.ssh/ed25519_alicloud.pub
-
登录到服务器
-
创建密钥文件
1
2mkdir ·/.ssh
vim ~/.ssh/authorized_keys将复制的公钥粘贴进来。
-
设置权限:必须设置正确的权限才会生效
1
2chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
¶验证
如果修改了默认的密钥文件名,即不是 id_esa
,就需要在登陆时指定使用的私钥文件,或者,在配置文件中进行定义:
1 | vim ~/.ssh/config |
config
文件帮忙管理每个会话使用的用户、端口和私钥文件。
说明:
- 配置文件中不区分大小写,
Host
和host
是一样的 - 通过
tab
进行缩进区分配置块 - 所有参数都支持通配符设置,比如将
Host
设置为*
表示全局配置。 - 没有必须配置的项,根据需要配置即可。
添加内容基本如下:
1 | Host sftp_user |
Host
配置块,名称自定义,用于之后连接使用,比如这里是sftp_user
,之后我要使用这个用户连接服务器就可以直接用ssh sftp_user
即可,会自动使用配置的用户、端口和私钥。Hostname
服务器地址,IP或域名User
登录用户Port
SSH 登录端口,默认 22。Identityfile
使用的本地私钥文件
还有一些参数并不常用这里不介绍,感兴趣自行搜索:“ssh config配置”。
¶关闭密码登录
⚠️ 你只有在使用私钥成功登录后才能做这个操作
⚠️ 你只有在使用私钥成功登录后才能做这个操作
⚠️ 你只有在使用私钥成功登录后才能做这个操作
重要的事情我已经说了三遍,再发生什么问题就怪不得我了😌。
修改 SSH 配置文件:
1 | vim /etc/ssh/sshd_config |
修改/添加以下配置:
1 | Port 22333 |
如果,假设,万一关闭密码登录之后发现私钥也登不上,可以参考本 登不上服务器了怎么办 。
¶SFTP 同步
啊!中间跑题了一段,既然服务器上都准备好了,怎么同步到本地呢,使用 SFTP 工具就可以了,我因为用的是 GoodSync,配置好账号和路径就可以定时同步了。
等有时间出一期文章简单介绍一下我的备份方案吧。