在Linux系统中,远程文件传输是服务器运维、跨设备协作时的核心操作,SCP和SFTP作为基于SSH协议的安全传输方式,被广泛应用在各种场景中。两者都依赖SSH服务运行,因此首先需要确保Linux系统已经安装并启动了SSH服务。

一、前置准备:配置SSH服务
SCP和SFTP都依赖SSH服务实现通信,因此需要先完成SSH服务的基础配置。大多数Linux发行版默认已经安装了OpenSSH相关组件,若未安装可以通过包管理器安装。
1. 安装OpenSSH服务
对于Debian/Ubuntu系统,执行以下命令安装:
# 更新软件包索引 sudo apt update # 安装服务端和客户端组件 sudo apt install openssh-server openssh-client -y
对于CentOS/RHEL系统,执行以下命令安装:
# 安装OpenSSH服务组件 sudo yum install openssh-server openssh-clients -y
2. 启动并设置SSH服务开机自启
安装完成后启动SSH服务,并配置开机自动启动:
# 启动SSH服务 sudo systemctl start sshd # 设置开机自启 sudo systemctl enable sshd # 检查服务运行状态 sudo systemctl status sshd
如果服务状态显示active (running),说明SSH服务已经正常运行,此时SCP和SFTP的基础运行环境已经就绪。
二、SCP的使用与配置
SCP(Secure Copy)是基于SSH的加密文件复制工具,使用方式和传统的cp命令类似,适合快速传输单个或少量文件,不需要建立交互式连接。
1. SCP基础语法
SCP的通用语法格式如下:
# 从本地复制到远程 scp [可选参数] 本地文件路径 远程用户@远程主机IP:远程目录路径 # 从远程复制到本地 scp [可选参数] 远程用户@远程主机IP:远程文件路径 本地目录路径 # 远程两台主机之间传输文件 scp [可选参数] 远程用户1@远程主机1IP:文件路径 远程用户2@远程主机2IP:目标路径
2. 常用参数说明
-r:递归复制整个目录-P:指定SSH服务的端口号,默认是22,若修改了SSH端口需要加该参数-v:显示详细的传输调试信息,方便排查问题-C:传输过程中启用压缩,适合大文件传输
3. 使用示例
示例1:将本地/home/user/test.txt文件复制到远程主机192.168.0.1的/tmp目录下,远程用户为root:
scp /home/user/test.txt root@192.168.0.1:/tmp/
示例2:将远程主机192.168.0.1的/var/log/syslog文件复制到本地当前目录:
scp root@192.168.0.1:/var/log/syslog ./
示例3:递归复制本地/home/user/project目录到远程主机的/opt目录下,SSH端口为2222:
scp -r -P 2222 /home/user/project root@192.168.0.1:/opt/
三、SFTP的使用与配置
SFTP(SSH File Transfer Protocol)是交互式的文件传输协议,支持查看远程目录、创建删除文件、修改权限等操作,适合需要批量管理远程文件的场景。
1. 连接SFTP服务器
使用以下命令连接远程SFTP服务器,默认端口为22,若修改了SSH端口需要加-P参数:
# 默认端口连接 sftp 远程用户@远程主机IP # 指定端口连接 sftp -P 2222 远程用户@远程主机IP
连接成功后会进入SFTP交互式命令行,提示符为sftp>。
2. 常用SFTP命令
| 命令 | 作用说明 |
|---|---|
ls | 查看远程当前目录下的文件列表 |
lls | 查看本地当前目录下的文件列表 |
cd 目录路径 | 切换远程工作目录 |
lcd 目录路径 | 切换本地工作目录 |
get 远程文件路径 | 下载远程文件到本地当前目录 |
get -r 远程目录路径 | 递归下载远程目录到本地 |
put 本地文件路径 | 上传本地文件到远程当前目录 |
put -r 本地目录路径 | 递归上传本地目录到远程 |
mkdir 目录名 | 在远程创建新目录 |
rm 文件名 | 删除远程文件 |
rmdir 目录名 | 删除远程空目录 |
exit 或 quit | 退出SFTP连接 |
3. 使用示例
示例:连接远程服务器后,查看远程/tmp目录,将本地的data.zip上传到远程/tmp目录,再下载远程的report.pdf到本地:
sftp root@192.168.0.1 # 切换远程目录到/tmp sftp> cd /tmp # 查看远程目录内容 sftp> ls # 上传本地data.zip sftp> put data.zip # 下载远程report.pdf sftp> get report.pdf # 退出连接 sftp> exit
四、常见问题排查
如果SCP或SFTP连接失败,可以按照以下步骤排查:
- 检查远程主机SSH服务是否正常运行,使用
systemctl status sshd查看状态 - 检查远程主机防火墙是否放行了SSH端口,默认22端口,若修改了端口需要放行对应端口
- 检查远程用户是否有对应目录的读写权限,避免权限不足导致传输失败
- 若提示连接超时,检查本地和远程主机之间的网络是否连通,可以使用
ping 远程主机IP测试连通性 - 若提示认证失败,检查用户名和密码是否正确,或者SSH密钥配置是否正确
五、安全加固建议
为了避免远程文件传输带来安全风险,建议做以下加固:
- 修改SSH默认端口,避免使用22端口被批量扫描
- 禁用SSH密码登录,使用密钥对认证,提升认证安全性
- 限制SSH允许登录的用户,在
/etc/ssh/sshd_config中配置AllowUsers 用户名指定允许登录的用户 - 定期更新OpenSSH组件,修复已知安全漏洞