Debian SFTP文件传输完整流程
SFTP基于SSH协议,需先确保系统安装OpenSSH服务器。在Debian终端执行以下命令:
sudo apt update && sudo apt install openssh-server -y 安装完成后,SSH服务会自动启动(若未启动,可通过sudo systemctl start ssh手动启动)。
编辑前建议备份/etc/ssh/sshd_config,避免配置错误导致SSH无法使用:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak 使用文本编辑器(如nano)打开配置文件:
sudo nano /etc/ssh/sshd_config 找到#Subsystem sftp /usr/lib/openssh/sftp-server(默认注释),取消注释并将internal-sftp作为更轻量的子系统(推荐):
Subsystem sftp internal-sftp 为提升安全性,建议通过用户组限制SFTP用户的访问范围。在配置文件末尾添加以下内容(以sftp_users组为例):
Match Group sftp_users ChrootDirectory %h # 限制用户只能访问其家目录 ForceCommand internal-sftp # 强制使用SFTP,禁止SSH登录 AllowTcpForwarding no # 禁止端口转发 X11Forwarding no # 禁止X11转发 保存并退出编辑器(Ctrl+O→Enter→Ctrl+X)。
创建专门的用户组(如sftp_users)和用户(如sftpuser),并设置密码:
sudo groupadd sftp_users sudo useradd -m -G sftp_users -s /sbin/nologin sftpuser # -s /sbin/nologin禁止SSH登录 sudo passwd sftpuser # 按提示设置密码 SFTP要求用户家目录的所有者为root(权限755),否则无法登录:
sudo chown root:root /home/sftpuser sudo chmod 755 /home/sftpuser 在家目录下创建用于文件传输的子目录(如uploads),并设置用户拥有该目录的读写权限:
sudo mkdir /home/sftpuser/uploads sudo chown sftpuser:sftp_users /home/sftpuser/uploads sudo chmod 755 /home/sftpuser/uploads 注:
ChrootDirectory(如/home/sftpuser)必须由root拥有,且不能有写权限;子目录(如uploads)需由用户拥有,用于实际文件操作。
配置生效后,重启SSH服务使更改生效:
sudo systemctl restart ssh 若需设置开机自启(默认已开启),可执行:
sudo systemctl enable ssh 在本地终端使用sftp命令连接服务器(替换your_server_ip和sftpuser为实际值):
sftp sftpuser@your_server_ip 输入密码后,若提示Connected to your_server_ip.,则表示连接成功。
使用FileZilla、WinSCP等客户端,输入以下信息连接:
sftpuser连接成功后,进入SFTP命令模式,常用命令如下:
| 命令 | 作用 |
|---|---|
ls | 列出远程当前目录的文件/目录 |
cd [目录名] | 切换远程目录 |
get [远程文件] [本地路径] | 下载远程文件到本地(如get file.txt ~/Downloads) |
put [本地文件] [远程路径] | 上传本地文件到远程(如put ~/Documents/data.csv /uploads) |
mkdir [目录名] | 在远程创建目录 |
rm [文件名] | 删除远程文件 |
rmdir [目录名] | 删除远程空目录 |
exit/bye | 退出SFTP会话 |
pwd | 查看远程当前目录路径 |
lpwd | 查看本地当前目录路径 |
密钥认证比密码更安全,步骤如下:
ssh-keygen -t rsa -b 4096 按提示保存密钥(默认~/.ssh/id_rsa)和公钥(~/.ssh/id_rsa.pub)。ssh-copy-id sftpuser@your_server_ip sftp -i ~/.ssh/id_rsa sftpuser@your_server_ip 在/etc/ssh/sshd_config中添加AllowUsers或AllowGroups,仅允许特定用户/IP连接:
AllowUsers sftpuser@192.168.1.* # 仅允许192.168.1.网段的sftpuser 重启SSH服务使更改生效。