SSH 常见用法(四):使用 SCP 和 SFTP 远程传输文件

SSH 常见用法(四):使用 SCP 和 SFTP 远程传输文件

浅谈 SSH:原理、认证与四种常见用法

系列导读

本系列共包含一篇总览和四篇专题文章:

系列位置 文章主题 主要内容
总览 浅谈 SSH 认识 SSH 及其四种常见用法
第一篇 SSH 常见用法(一):远程登录服务器 密码登录、密钥认证和 ~/.ssh/config
第二篇 SSH 常见用法(二):通过 SSH 认证访问 Git 仓库 配置 SSH Key,并通过 SSH 操作远程仓库
第三篇 SSH 常见用法(三):SSH 隧道与端口转发 本地与远程端口转发
第四篇(本文) SSH 常见用法(四):使用 SCP 和 SFTP 远程传输文件 在本机与服务器之间安全传输文件

一、前言

SSH 是一种安全访问和操作远程计算机的方式。

SSH 的全称是 Secure Shell(安全外壳协议),是一种用于安全访问和操作远程计算机的加密网络协议。

SSH 主要提供三项安全能力:

  1. 加密通信:防止用户名、密码、命令和传输内容被窃听。
  2. 确认服务器身份:帮助客户端判断当前连接的是不是目标服务器。
  3. 确认登录者身份:服务器可以通过密码或 SSH Key 验证客户端身份。

SSH 常见的使用场景包括远程登录服务器、Git 身份认证、端口转发和远程文件传输。本文讨论其中的第四种:使用 SCP 和 SFTP 在本机和远程服务器之间安全传输文件。

SSH 远程传输文件,本质上就是:

利用 SSH 的加密连接,在本机和远程服务器之间安全地复制文件。

最常见有两个工具:

工具 作用
scp 直接复制文件/目录,简单常用
sftp 类似 FTP 的交互式文件传输,但走 SSH

最常见的是 scp。

二、SCP:使用命令直接复制文件

2.1 本地到远程

2.1.1 上传单个文件

语法:

bash 复制代码
scp 本地文件 用户名@服务器IP:远程目录

例如,把本机的 test.txt 上传到远程服务器的 /home/devuser/ 目录:

bash 复制代码
scp test.txt devuser@203.0.113.10:/home/devuser/

意思是:

Plain 复制代码
本机 test.txt
    ↓
SSH 加密传输
    ↓
远程服务器
203.0.113.10
    ↓
/home/devuser/
2.1.2 上传整个文件夹

上传文件夹时,需要添加 -r 参数:

bash 复制代码
scp -r 本地文件夹 用户名@服务器IP:远程目录

例如,把本机的 project 文件夹上传到远程服务器:

bash 复制代码
scp -r project/ devuser@203.0.113.10:/home/devuser/

其中:

text 复制代码
-r
= recursive
= 递归复制文件夹及其全部内容

2.2 远程到本地

2.2.1 下载单个文件

语法:

bash 复制代码
scp 用户名@服务器IP:远程文件 本地目录

例如,把远程服务器上的 test.txt 下载到本机当前目录:

bash 复制代码
scp devuser@203.0.113.10:/home/devuser/test.txt ./
2.2.2 下载整个文件夹

语法:

bash 复制代码
scp -r 用户名@服务器IP:远程文件夹 本地目录

例如,把远程服务器上的 project 文件夹下载到本机当前目录:

bash 复制代码
scp -r devuser@203.0.113.10:/home/devuser/project/ ./

2.3 使用非默认 SSH 端口

如果 SSH 不是默认 22 端口,比如 31022,scp 要用大写 -P:

Bash 复制代码
scp -P 31022 test.txt devuser@203.0.113.10:/home/devuser/

注意这里和 ssh 不一样:

Plain 复制代码
ssh  指定端口:-p
scp  指定端口:-P

2.4 SCP 常用命令速查

所以这一块你先记一句就够了:

scp = 通过 SSH 在本机和远程服务器之间复制文件或文件夹。

最核心的四种操作:

text 复制代码
# 上传文件
scp 本地文件 user@server:远程路径

# 上传文件夹
scp -r 本地文件夹 user@server:远程路径

# 下载文件
scp user@server:远程文件 本地路径

# 下载文件夹
scp -r user@server:远程文件夹 本地路径

三、SFTP:交互式管理远程文件

SFTP 的全称是 SSH File Transfer Protocol。它通过 SSH 建立加密连接,并提供一个可以连续浏览、上传和下载文件的交互式操作环境。

SFTP 是独立的文件传输协议,并不是简单地给传统 FTP 增加 SSH 加密。

3.1 建立 SFTP 连接

使用默认的 22 端口:

bash 复制代码
sftp devuser@203.0.113.10

如果 SSH 使用非默认端口,例如 31022,需要使用大写 -P:

bash 复制代码
sftp -P 31022 devuser@203.0.113.10

如果已经在 ~/.ssh/config 中配置了服务器别名,也可以直接执行:

bash 复制代码
sftp dev-server

连接成功后,会进入 SFTP 交互环境:

text 复制代码
sftp>

3.2 区分本机与远程命令

进入 SFTP 后,默认的文件操作通常针对远程服务器。以 l 开头的对应命令用于操作本机,其中 l 可以理解为 local。

命令 作用
pwd 查看远程服务器当前目录
lpwd 查看本机当前目录
ls 查看远程服务器中的文件
lls 查看本机文件
cd 切换远程服务器目录
lcd 切换本机目录
mkdir 在远程服务器上创建目录
lmkdir 在本机创建目录

例如:

text 复制代码
sftp> pwd
Remote working directory: /home/devuser

sftp> lpwd
Local working directory: /Users/yourname

3.3 本地到远程

3.3.1 上传单个文件

在 SFTP 交互环境中,使用 put 上传文件:

text 复制代码
sftp> put test.txt /home/devuser/test.txt

如果省略远程文件名,通常会使用原来的文件名:

text 复制代码
sftp> put test.txt
3.3.2 上传整个文件夹

使用 put -R 递归上传文件夹:

text 复制代码
sftp> put -R project/ /home/devuser/

3.4 远程到本地

3.4.1 下载单个文件

使用 get 把远程文件下载到本机:

text 复制代码
sftp> get /home/devuser/test.txt ./

如果省略本地保存路径,文件会下载到 lpwd 显示的本机当前目录:

text 复制代码
sftp> get /home/devuser/test.txt
3.4.2 下载整个文件夹

使用 get -R 递归下载远程文件夹:

text 复制代码
sftp> get -R /home/devuser/project/ ./

这里要注意 SCP 与 SFTP 的递归参数区别:

text 复制代码
SCP 复制文件夹:scp -r       # 小写 -r
SFTP 上传文件夹:put -R      # 大写 -R
SFTP 下载文件夹:get -R      # 大写 -R

3.5 退出 SFTP

完成传输后,可以使用 exit 或 bye 退出:

text 复制代码
sftp> exit

四、SCP 与 SFTP 对比

对比项 SCP SFTP
使用方式 一条命令直接复制 连接后进入交互环境
上传文件 scp file user@server:path put file
下载文件 scp user@server:file ./ get file
浏览远程目录 不方便 支持 pwd、ls、cd
连续执行多个操作 每次单独执行命令 可以在同一个会话中连续操作
适用场景 快速复制文件或目录 浏览和管理远程文件

五、总结

SCP 适合通过一条命令快速复制文件或目录;SFTP 适合进入交互式会话,浏览并连续管理远程文件。

两者都通过 SSH 建立加密连接,也都可以复用 SSH 密钥和 ~/.ssh/config 中的服务器配置。


个人声明: 本文为个人学习笔记,如有错误,欢迎指正。

相关推荐
Fcy6481 小时前
Linux下 网络层IP协议详解
linux·运维·tcp/ip
NPE~2 小时前
CMDB科普:配置管理数据库——运维相关
运维·数据库·科普·cmdb·配置管理数据库
龙腾-虎跃3 小时前
Linux 趣味实战|纯 Bash Shell 脚本实现俄罗斯方块终端小游戏(完整源码资源)
linux·运维·bash
阳光九叶草LXGZXJ10 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
黄大刀12 小时前
DataPulse一款开箱即用的SCADA(四)-历史记录
运维·scada·动环
归秋14214 小时前
2026 企业 AI 办公工具选型指南:从评估框架到产品适配
大数据·运维·人工智能
Android系统攻城狮14 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
硅基手札15 小时前
【Linux内核专栏 14】网络协议栈
linux·运维·网络协议
工作10年+,存储芯片行业17 小时前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie