通过SFTP在Linux上远程管理服务器的完整步骤
SFTP是OpenSSH的一部分,大多数Linux发行版默认安装。若未安装,可通过以下命令安装:
sudo apt update && sudo apt install openssh-serversudo yum install openssh-server 或 sudo dnf install openssh-serversystemctl status sshd(CentOS/RHEL)或systemctl status ssh(Ubuntu/Debian)检查服务状态,确保其处于active (running)。编辑SSH配置文件/etc/ssh/sshd_config,添加或修改以下内容以限制用户仅能通过SFTP访问并增强安全性:
# 确保SFTP子系统启用(默认路径可能因系统而异)
Subsystem sftp internal-sftp
# 限制sftpusers组的用户只能使用SFTP,且锁定在自家目录
Match Group sftpusers
ChrootDirectory %h # 将用户限制在家目录(Chroot环境)
ForceCommand internal-sftp # 强制使用SFTP,禁止SSH shell访问
AllowTcpForwarding no # 禁止TCP转发
X11Forwarding no # 禁止X11转发
关键说明:
ChrootDirectory %h:将用户限制在其家目录(如/home/username),防止访问系统其他目录;internal-sftp:使用OpenSSH内置的SFTP服务,无需额外安装;AllowTcpForwarding和X11Forwarding可进一步减少攻击面。为SFTP用户创建专用组,并添加用户(避免使用系统管理员账户):
# 创建sftpusers组
sudo groupadd sftpusers
# 创建用户(如"sftpuser"),并添加到sftpusers组
sudo useradd -m -G sftpusers -s /bin/false sftpuser # -s /bin/false禁止shell登录
# 设置用户密码(或使用密钥认证,更安全)
sudo passwd sftpuser
关键说明:
-G sftpusers:将用户添加到sftpusers组;-s /bin/false:禁止用户通过SSH登录shell,仅允许SFTP访问;root(后续步骤会提及)。SFTP的ChrootDirectory要求家目录必须由root拥有且权限为755,用户无法写入家目录本身,但可在家目录下创建子目录(如upload)用于文件上传:
# 创建用户家目录(若未自动创建)
sudo mkdir -p /home/sftpuser
# 设置家目录所有者为root,权限为755
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
# 在家目录下创建可上传文件的子目录(如upload)
sudo mkdir -p /home/sftpuser/upload
# 设置子目录所有者为用户,权限为755(或775,根据需求)
sudo chown sftpuser:sftpusers /home/sftpuser/upload
sudo chmod 755 /home/sftpuser/upload
关键说明:
root所有权是ChrootDirectory的要求,否则用户无法连接;upload)的所有者为sftpuser,允许用户上传文件。为避免密码泄露,建议使用SSH密钥认证:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/sftp_key # 生成4096位RSA密钥对
ssh-copy-id -i ~/.ssh/sftp_key.pub sftpuser@remote_host # 自动复制公钥到服务器的~/.ssh/authorized_keys
/etc/ssh/sshd_config,设置PasswordAuthentication no,然后重启SSH服务。修改配置后,重启SSH服务使更改生效:
sudo systemctl restart sshsudo systemctl restart sshd在本地终端输入以下命令,替换your_username(如sftpuser)和remote_host(服务器IP或域名):
sftp your_username@remote_host
输入密码(或密钥密码)后,进入SFTP交互界面。
推荐使用FileZilla(跨平台)或WinSCP(Windows):
SFTP;22(默认);连接成功后,可使用以下命令管理文件:
lscd remote_dir(如cd upload)get remote_file [local_file](如get example.txt ~/Downloads/example.txt)put local_file [remote_file](如put ~/Documents/report.pdf /upload/report.pdf)mkdir remote_dir(如mkdir new_folder)rm remote_file(如rm old_file.txt)rmdir remote_dir(如rmdir empty_folder)exit 或 byeufw、iptables)限制SSH端口(22)的访问,仅允许信任的IP地址连接;tail -f /var/log/auth.log(Ubuntu/Debian)或tail -f /var/log/secure(CentOS/RHEL)查看SFTP登录日志,及时发现异常;/etc/ssh/sshd_config,设置PermitRootLogin no,防止root账户通过SFTP登录。