/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
SSH 常见用法(四):使用 SCP 和 SFTP 远程传输文件
系列导读
本系列共包含一篇总览和四篇专题文章:
| 总览 | 浅谈 SSH:原理、认证与四种常见用法 | 认识 SSH 及其四种常见用法 |
| 第一篇 | SSH 常见用法(一):远程登录服务器 | 密码登录、密钥认证和 ~/.ssh/config |
| 第二篇 | SSH 常见用法(二):通过 SSH 认证访问 Git 仓库 | 配置 SSH Key,并通过 SSH 操作远程仓库 |
| 第三篇 | SSH 常见用法(三):本地端口转发与远程端口转发 | -L 本地端口转发与 -R 远程端口转发 |
| 第四篇(本文) | SSH 常见用法(四):使用 SCP 和 SFTP 远程传输文件 | 在本机与服务器之间安全传输文件 |
一、前言
SSH 是一种安全访问和操作远程计算机的方式。
SSH 的全称是 Secure Shell(安全外壳协议),是一种用于安全访问和操作远程计算机的加密网络协议。
SSH 主要提供三项安全能力:
SSH 常见的使用场景包括远程登录服务器、Git 身份认证、端口转发和远程文件传输。本文讨论其中的第四种:使用 SCP 和 SFTP 在本机和远程服务器之间安全传输文件。
SSH 远程传输文件,本质上就是:
利用 SSH 的加密连接,在本机和远程服务器之间安全地复制文件。
最常见有两个工具:
| scp | 直接复制文件/目录,简单常用 |
| sftp | 类似 FTP 的交互式文件传输,但走 SSH |
最常见的是 scp。

二、SCP:使用命令直接复制文件
2.1 本地到远程
2.1.1 上传单个文件
语法:
scp 本地文件 用户名@服务器IP:远程目录
例如,把本机的 test.txt 上传到远程服务器的 /home/devuser/ 目录:
scp test.txt devuser@203.0.113.10:/home/devuser/
意思是:
本机 test.txt
↓
SSH 加密传输
↓
远程服务器
203.0.113.10
↓
/home/devuser/
2.1.2 上传整个文件夹
上传文件夹时,需要添加 -r 参数:
scp -r 本地文件夹 用户名@服务器IP:远程目录
例如,把本机的 project 文件夹上传到远程服务器:
scp -r project/ devuser@203.0.113.10:/home/devuser/
其中:
-r
= recursive
= 递归复制文件夹及其全部内容
2.2 远程到本地
2.2.1 下载单个文件
语法:
scp 用户名@服务器IP:远程文件 本地目录
例如,把远程服务器上的 test.txt 下载到本机当前目录:
scp devuser@203.0.113.10:/home/devuser/test.txt ./
2.2.2 下载整个文件夹
语法:
scp -r 用户名@服务器IP:远程文件夹 本地目录
例如,把远程服务器上的 project 文件夹下载到本机当前目录:
scp -r devuser@203.0.113.10:/home/devuser/project/ ./
2.3 使用非默认 SSH 端口
如果 SSH 不是默认 22 端口,比如 31022,scp 要用大写 -P:
scp -P 31022 test.txt devuser@203.0.113.10:/home/devuser/
注意这里和 ssh 不一样:
ssh 指定端口:-p
scp 指定端口:-P
2.4 SCP 常用命令速查
所以这一块你先记一句就够了:
scp = 通过 SSH 在本机和远程服务器之间复制文件或文件夹。
最核心的四种操作:
# 上传文件
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 端口:
sftp devuser@203.0.113.10
如果 SSH 使用非默认端口,例如 31022,需要使用大写 -P:
sftp -P 31022 devuser@203.0.113.10
如果已经在 ~/.ssh/config 中配置了服务器别名,也可以直接执行:
sftp dev-server
连接成功后,会进入 SFTP 交互环境:
sftp>
3.2 区分本机与远程命令
进入 SFTP 后,默认的文件操作通常针对远程服务器。以 l 开头的对应命令用于操作本机,其中 l 可以理解为 local。
| pwd | 查看远程服务器当前目录 |
| lpwd | 查看本机当前目录 |
| ls | 查看远程服务器中的文件 |
| lls | 查看本机文件 |
| cd | 切换远程服务器目录 |
| lcd | 切换本机目录 |
| mkdir | 在远程服务器上创建目录 |
| lmkdir | 在本机创建目录 |
例如:
sftp> pwd
Remote working directory: /home/devuser
sftp> lpwd
Local working directory: /Users/yourname
3.3 本地到远程
3.3.1 上传单个文件
在 SFTP 交互环境中,使用 put 上传文件:
sftp> put test.txt /home/devuser/test.txt
如果省略远程文件名,通常会使用原来的文件名:
sftp> put test.txt
3.3.2 上传整个文件夹
使用 put -R 递归上传文件夹:
sftp> put -R project/ /home/devuser/
3.4 远程到本地
3.4.1 下载单个文件
使用 get 把远程文件下载到本机:
sftp> get /home/devuser/test.txt ./
如果省略本地保存路径,文件会下载到 lpwd 显示的本机当前目录:
sftp> get /home/devuser/test.txt
3.4.2 下载整个文件夹
使用 get -R 递归下载远程文件夹:
sftp> get -R /home/devuser/project/ ./
这里要注意 SCP 与 SFTP 的递归参数区别:
SCP 复制文件夹:scp -r # 小写 -r
SFTP 上传文件夹:put -R # 大写 -R
SFTP 下载文件夹:get -R # 大写 -R
3.5 退出 SFTP
完成传输后,可以使用 exit 或 bye 退出:
sftp> exit
四、SCP 与 SFTP 对比
| 使用方式 | 一条命令直接复制 | 连接后进入交互环境 |
| 上传文件 | scp file user@server:path | put file |
| 下载文件 | scp user@server:file ./ | get file |
| 浏览远程目录 | 不方便 | 支持 pwd、ls、cd |
| 连续执行多个操作 | 每次单独执行命令 | 可以在同一个会话中连续操作 |
| 适用场景 | 快速复制文件或目录 | 浏览和管理远程文件 |
五、总结
SCP 适合通过一条命令快速复制文件或目录;SFTP 适合进入交互式会话,浏览并连续管理远程文件。
两者都通过 SSH 建立加密连接,也都可以复用 SSH 密钥和 ~/.ssh/config 中的服务器配置。
个人声明: 本文为个人学习笔记,如有错误,欢迎指正。





