欢迎光临
我们一直在努力

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

/* 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 Key 验证客户端身份。
  • 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 对比

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

    五、总结

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

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


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

    赞(0)
    未经允许不得转载:171主机测评 » SSH 常见用法(四):使用 SCP 和 SFTP 远程传输文件
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址