凌峰创科服务平台

SSH如何上传文件到Linux服务器?

使用 scp (Secure Copy) - 最简单直接

scp 是一个基于 SSH 协议的命令行工具,专门用于在本地主机和远程主机之间安全地复制文件,它的语法和 cp (copy) 命令非常相似,很容易上手。

SSH如何上传文件到Linux服务器?-图1
(图片来源网络,侵删)

基本语法

# 从本地复制到远程
scp [本地路径] [用户名@远程服务器IP:远程路径]
# 从远程复制到本地
scp [用户名@远程服务器IP:远程路径] [本地路径]

详细步骤

  1. 打开本地终端 (在你的 Mac 或 Linux 电脑上,或者在 Windows 上使用 WSL、Git Bash、PowerShell 等)。

  2. 执行上传命令

    示例 1:上传单个文件 假设你要将本地的 report.pdf 文件上传到服务器的 /home/alex/documents/ 目录下,服务器用户名为 alex,IP 地址为 168.1.100

    scp ./report.pdf alex@192.168.1.100:/home/alex/documents/
    • ./report.pdf: 本地文件路径。 表示当前目录。
    • alex@192.168.1.100:: 远程服务器的用户名和 IP 地址,后面的冒号 是必须的,它表示路径的开始。
    • /home/alex/documents/: 远程服务器上的目标路径。

    示例 2:上传整个目录 如果你想上传一个名为 project_files 的整个目录,需要使用 -r (recursive) 选项。

    SSH如何上传文件到Linux服务器?-图2
    (图片来源网络,侵删)
    scp -r ./project_files alex@192.168.1.100:/home/alex/documents/
  3. 输入密码 命令执行后,系统会提示你输入 alex 用户在 168.1.100 服务器上的密码,输入时不会显示任何字符(光标不动),输入完成后按回车键即可开始传输。

优点

  • 简单易用:语法直观,与 cp 命令相似。
  • 预装:大多数 Linux/macOS 系统都默认安装了 scp
  • 安全:所有传输都通过 SSH 加密。

缺点

  • 每次都需要输入密码:如果需要频繁传输,这会很繁琐,解决方法请参考下面的“高级技巧”。
  • 功能相对单一:只适合复制文件,没有更高级的功能。

使用 rsync - 更强大、更高效

rsync (Remote Sync) 是一个极其强大的文件同步工具,它不仅可以像 scp 一样复制文件,还可以增量同步,即只传输源文件和目标文件之间有差异的部分,这使得它在处理大文件或频繁同步时效率极高。

基本语法

# 从本地同步到远程
rsync [选项] [本地路径] [用户名@远程服务器IP:远程路径]

常用选项

  • -a, --archive: 归档模式,表示以递归方式传输文件,并保留所有文件属性(如权限、时间戳等),这通常是你想要的行为。
  • -v, --verbose: 详细模式,在终端显示传输过程。
  • -z, --compress: 在传输过程中对文件进行压缩,可以减少网络带宽的占用。
  • --progress: 显示传输的实时进度条。

详细步骤

  1. 打开本地终端

  2. 执行上传命令

    SSH如何上传文件到Linux服务器?-图3
    (图片来源网络,侵删)

    示例 1:同步一个目录 将本地的 project_files 目录同步到服务器的 /home/alex/documents/,如果目标目录下已经存在一些文件,rsync 只会同步新增或修改过的文件。

    rsync -avz --progress ./project_files alex@192.168.1.100:/home/alex/documents/
    • -avz: 结合了归档、详细和压缩三个最常用的选项。
    • --progress: 可选,让你能看到酷炫的进度条。
  3. 输入密码 同样,系统会提示你输入远程服务器的用户密码。

优点

  • 高效:增量同步,速度远快于 scp,尤其适合大文件和目录。
  • 功能强大:可以排除特定文件 (--exclude)、保持符号链接、显示进度等。
  • 安全:同样通过 SSH 加密传输。

缺点

  • 学习曲线稍高:选项比 scp 多,初学者可能需要花点时间熟悉。
  • 不是所有系统都默认安装:虽然绝大多数现代 Linux 发行版都包含它,但一些极小的系统可能没有。

使用 sftp (SSH File Transfer Protocol) - 交互式上传

sftp 是一个交互式的文件传输程序,它为你提供了一个类似 FTP 的命令行界面,但所有通信都是通过 SSH 加密的,你可以登录后,使用一系列命令来浏览、上传、下载和删除文件。

基本语法

sftp [用户名@远程服务器IP]

详细步骤

  1. 打开本地终端

  2. 连接到服务器

    sftp alex@192.168.1.100

    连接成功后,你的终端提示符会变成 sftp>

  3. 使用 sftp 命令进行操作

    • ls: 列出远程服务器当前目录下的文件。
    • cd [path]: 切换远程服务器的目录。
    • `lcd [path]**: 切换你本地的目录。
    • put [local_file]: 上传一个文件到远程服务器。
    • put -r [local_dir]: 上传一个本地目录到远程服务器。
    • get [remote_file]: 从远程服务器下载一个文件到本地。
    • exitbye: 退出 sftp 会话。

    示例会话:

    # 本地终端
    $ sftp alex@192.168.1.100
    alex@192.168.1.100's password: 
    # 连接成功,进入 sftp 环境
    sftp> ls
    project_files  report.pdf
    sftp> cd documents
    sftp> put ./report.pdf
    Uploading ./report.pdf to /home/alex/documents/report.pdf
    report.pdf                               100%   25KB  25.0KB/s   00:00    
    sftp> put -r ./project_files
    Uploading ./project_files to /home/alex/documents/project_files
    sftp> exit
    # 回到本地终端
    $

优点

  • 交互式:可以方便地浏览远程文件系统,进行多种操作,无需每次都输入完整的路径。
  • 安全:所有操作都通过 SSH 加密。
  • 功能全面:支持上传、下载、删除、重命名等多种文件操作。

缺点

  • 非自动化:不适合用在脚本中,因为它是一个交互式会话。

高级技巧:使用 SSH 密钥对实现免密登录

无论是 scp 还是 rsync,每次都输入密码很麻烦,最佳实践是配置 SSH 密钥对,实现安全的免密登录。

  1. 在本地电脑上生成 SSH 密钥对 (如果还没有的话)

    ssh-keygen -t rsa -b 4096

    一路按回车键即可,默认会在 ~/.ssh/ 目录下生成 id_rsa (私钥) 和 id_rsa.pub (公钥)。

  2. 将公钥上传到远程服务器 使用 ssh-copy-id 命令可以一键完成:

    ssh-copy-id alex@192.168.1.100

    它会提示你输入 alex 用户的密码,成功后,你的公钥 ~/.ssh/id_rsa.pub 的内容会被追加到服务器上的 ~/.ssh/authorized_keys 文件中。

  3. 验证免密登录 你可以直接 ssh 登录而无需密码:

    ssh alex@192.168.1.100

    如果成功,以后再使用 scprsync 时,就再也不会提示你输入密码了!


总结与如何选择

特性 scp rsync sftp
易用性 ⭐⭐⭐⭐⭐ (非常简单) ⭐⭐⭐ (稍复杂) ⭐⭐⭐ (交互式)
效率 ⭐⭐⭐ (每次全量传输) ⭐⭐⭐⭐⭐ (增量同步,最高效) ⭐⭐⭐ (类似普通文件传输)
功能 ⭐⭐ (仅复制) ⭐⭐⭐⭐⭐ (功能强大) ⭐⭐⭐⭐ (文件管理全面)
适用场景 快速上传少量文件,一次性的操作。 强烈推荐,同步大目录、频繁备份、自动化脚本。 需要交互式浏览和管理远程文件时。

给你的建议:

  • 新手或一次性上传:直接使用 scp,最简单。
  • 任何正式或重复性的工作:强烈建议学习和使用 rsync,它的效率优势和丰富功能会让你受益匪浅。
  • 需要浏览服务器再决定上传什么:使用 sftp 的交互模式。
  • 无论用哪种:都强烈建议配置 SSH 密钥对 来实现免密登录,这是现代服务器管理的标准做法。
分享:
扫描分享到社交APP
上一篇
下一篇