菜鸟科技网

ssh命令打包

在远程服务器上打包文件,然后下载到本地

这是最常见的需求,你想在远程服务器上把一个目录或文件打包成一个压缩包,然后通过 SSH 安全地下载到自己的电脑上。

ssh命令打包-图1
(图片来源网络,侵删)

方法1:两步走(先打包,再下载)

这是最直观的方法,适合初学者。

步骤1:在远程服务器上打包文件

登录到服务器,使用 tar 命令打包。tar 是 Linux/Unix 系统下最常用的归档工具。

# ssh user@remote_server_ip
# 登录后执行以下命令
# 示例1:打包一个名为 my_project 的目录
tar -czf project_backup.tar.gz my_project/
# 示例2:打包多个文件和目录
tar -czf all_backups.tar.gz /var/log/nginx/ /home/user/config.conf
# 命令解释:
# -c: 创建一个新的归档文件
# -z: 使用 gzip 进行压缩(生成 .gz 文件)
# -f: 指定归档文件的名称

步骤2:下载打包好的文件

ssh命令打包-图2
(图片来源网络,侵删)

使用 scp (Secure Copy) 命令通过 SSH 通道下载文件。

# 在你的本地终端执行
scp user@remote_server_ip:/path/to/project_backup.tar.gz ./
# 命令解释:
# user: 远程服务器用户名
# remote_server_ip: 远程服务器 IP 地址或域名
# /path/to/project_backup.tar.gz: 远程服务器上打包文件的完整路径
# ./: 下载到当前本地目录

方法2:一步走(使用管道 和 tar 的远程功能)

这种方法更高效,因为它不需要在远程服务器上创建临时的 .tar.gz 文件,而是直接将压缩数据流传输到本地。

# 在你的本地终端执行
ssh user@remote_server_ip "tar -czf - /path/to/my_project" > project_backup.tar.gz
# 命令解释:
# ssh user@remote_server_ip: 连接到远程服务器
# "tar -czf - /path/to/my_project": 这是在远程服务器上执行的命令
#   -c: 创建归档
#   -z: 使用 gzip 压缩
#   -f -: 这里的 "-" 是关键!它告诉 tar 将输出写入到标准输出,而不是一个文件。
# > project_backup.tar.gz: 这是本地的 shell 操作,它接收来自 SSH 的标准输出,并将其重定向到一个本地文件。

这个命令的流程是:

  1. 本地终端通过 SSH 连接到远程服务器。
  2. 远程服务器执行 tar 命令,但不是把结果存成一个文件,而是通过标准输出“吐”出来。
  3. SSH 连接将这个“数据流”安全地传回本地。
  4. 本地的 > 操作符将这个数据流写入到 project_backup.tar.gz 文件中。

优点:

ssh命令打包-图3
(图片来源网络,侵删)
  • 高效:无需在远程服务器上创建和删除临时文件,节省磁盘 I/O。
  • 简洁:一条命令完成,无需两次登录。

在本地打包文件,然后上传到远程服务器

这个场景相对简单,直接使用 scp 即可。

# 在你的本地终端执行
scp local_files.tar.gz user@remote_server_ip:/path/on/remote/server/
# 命令解释:
# local_files.tar.gz: 本地已打包好的文件
# user@remote_server_ip:/path/on/remote/server/: 远程服务器的目标路径

更高级的用法(rsync

如果你需要同步一个目录,而不仅仅是打包一次,rsync 是比 scp 更强大的工具,它只传输变化的文件,非常高效。

使用 rsync 打包并传输(类似 scp

# 在本地终端执行
# 将本地目录同步到远程服务器的一个压缩包
# 注意:这种方式会在远程服务器上创建一个压缩包,而不是打包后传输。
# 如果你想要“打包传输流”,需要结合管道,比较复杂,通常不这样做。
# 更常见的用法是直接同步目录内容
rsync -avz -e ssh /path/to/local/dir/ user@remote_server_ip:/path/to/remote/dir/
# 如果确实需要先打包再同步,可以用方法一
tar -czf - /path/to/local/dir | ssh user@remote_server_ip "cat > /path/on/remote/server/backup.tar.gz"

使用 rsync 增量备份

rsync 的真正威力在于增量备份,它只传输自上次同步以来有变化的文件。

# 在本地终端执行
# -a: 归档模式,保留权限、时间戳等
# -v: 详细模式
# -z: 压缩传输数据
# -e ssh: 使用 SSH 作为远程 shell
# --delete: 删除目标目录中不存在于源目录的文件(使两边完全一致)
rsync -avz --delete -e ssh /path/to/local/dir/ user@remote_server_ip:/path/to/remote/dir/

总结与最佳实践

需求 推荐命令 优点 缺点
简单打包下载 scp (两步) 直观,易于理解 需要在远程服务器创建临时文件
高效打包下载 ssh "tar ..." > ... (一步) 高效,无临时文件,命令简洁 命令稍复杂,不易理解原理
本地打包上传 scp 简单直接 -
目录同步/增量备份 rsync 高效,只传变化,功能强大 命令选项较多,需要学习

对于绝大多数用户,我强烈推荐使用 ssh "tar -czf - ..." > local_file.tar.gz 的方式,因为它在效率和简洁性之间取得了最好的平衡。

额外提示:

  • 排除文件:在 tar 命令中使用 --exclude 来排除不需要的文件。

    ssh user@remote_server_ip "tar -czf - /path/to/my_project --exclude='*.tmp' --exclude='cache/'" > project_backup.tar.gz
  • 解压:下载到本地后,使用以下命令解压:

    # 解压到当前目录
    tar -xzf project_backup.tar.gz
    # 解压到指定目录
    tar -xzf project_backup.tar.gz -C /path/to/extract/
分享:
扫描分享到社交APP
上一篇
下一篇