菜鸟科技网

远程传输命令如何确保安全高效?

核心场景分类

  1. 传输文件/目录本身:将一个或多个文件/文件夹从一台机器复制到另一台机器。
  2. 远程执行命令:在远程机器上运行一个命令,并将结果(标准输出、标准错误)返回到本地机器。
  3. 文件同步:保持本地和远程目录内容一致,只传输有变化的文件。

下面我将针对每个场景,介绍最主流的命令行工具。

远程传输命令如何确保安全高效?-图1
(图片来源网络,侵删)

传输文件/目录

这是最常见的需求,主要工具有 scp, rsync, sftp

scp (Secure Copy - 安全拷贝)

scp 是基于 SSH 协议的,简单易用,适合一次性、小规模的文件传输。

语法: scp [选项] [源路径] [目标路径]

关键点:

远程传输命令如何确保安全高效?-图2
(图片来源网络,侵删)
  • [源路径][目标路径] 的格式可以是 本地路径用户名@主机名:远程路径
  • 传输是加密的,但效率通常低于 rsync

示例:

  • 从本地上传文件到远程服务器:

    # 将本地的 /path/to/local_file.txt 上传到远程服务器的 /home/user/ 目录
    scp /path/to/local_file.txt user@remote_server:/home/user/
    # 上传整个目录(需要加 -r 选项)
    scp -r /path/to/local_directory user@remote_server:/home/user/
  • 从远程服务器下载文件到本地:

    # 将远程服务器上的 /home/user/remote_file.txt 下载到当前本地目录
    scp user@remote_server:/home/user/remote_file.txt .
    # 下载整个目录
    scp -r user@remote_server:/home/user/remote_directory .
  • 通过中间代理服务器(跳板机)传输:

    远程传输命令如何确保安全高效?-图3
    (图片来源网络,侵删)
    # 从本地 -> 跳板机 -> 目标服务器
    scp -o ProxyCommand="ssh -W %h:%p user@jump_server" /path/to/local_file.txt user@target_server:/home/user/

rsync (Remote Sync - 远程同步)

rsync 是一个更强大、更高效的工具,尤其适合传输大文件或目录,它会检查源和目标之间的差异,只传输变化的部分,非常适合备份和同步。

语法: rsync [选项] [源路径] [目标路径]

关键点:

  • 增量传输:只同步变化的文件,速度极快。
  • 压缩传输:可以在传输前压缩数据,节省带宽。
  • 保持文件属性:可以保留文件的权限、时间戳等元数据。
  • 支持排除文件:可以通过规则排除特定文件或目录。

常用选项:

  • -a (archive): 归档模式,相当于 -rlptgoD 的集合,保留几乎所有属性。
  • -v (verbose): 显示详细过程。
  • -z (compress): 压缩数据传输。
  • -h (human-readable): 以人类可读的格式显示文件大小。
  • --progress: 显示传输进度。
  • --delete: 删除目标目录中存在但源目录中不存在的文件(谨慎使用!)。

示例:

  • 同步本地目录到远程服务器(常用备份命令):

    # 将本地 /path/to/local_dir 同步到远程服务器的 /home/user/backup_dir
    # 如果远程目录下有文件但本地没有,这些文件不会被删除(除非加 --delete)
    rsync -avz /path/to/local_dir user@remote_server:/home/user/backup_dir
  • 从远程服务器同步到本地:

    # 将远程服务器的 /home/user/backup_dir 同步到本地的 /path/to/local_dir
    # 如果本地目录下有文件但远程没有,这些文件不会被删除
    rsync -avz user@remote_server:/home/user/backup_dir /path/to/local_dir
  • 删除目标目录多余的文件(完整同步):

    # 确保 /path/to/local_dir 和远程 /home/user/backup_dir 完全一致
    # 如果本地删除了某个文件,远程也会被删除
    rsync -avz --delete /path/to/local_dir user@remote_server:/home/user/backup_dir

sftp (SSH File Transfer Protocol)

sftp 是一个交互式的文件传输程序,感觉就像一个 FTP 客户端,但所有传输都是通过 SSH 加密的,它更适合需要浏览、上传、下载、删除、重命名等复杂文件操作的场景。

语法: sftp [用户名@]主机名

示例:

# 连接到远程服务器
sftp user@remote_server
# 进入 sftp 交互式命令行后,可以执行以下命令:
sftp> ls                  # 列出远程当前目录文件
sftp> get remote_file.txt # 从远程下载文件到本地当前目录
sftp> put local_file.txt  # 从本地上传文件到远程当前目录
sftp> cd /path/to/dir     # 切换远程目录
sftp> lcd /local/path     # 切换本地目录
sftp> mkdir new_dir       # 在远程创建新目录
sftp> rm unwanted_file    # 删除远程文件
sftp> exit                # 退出 sftp

远程执行命令

如果你不需要传输文件,只是想在远程机器上运行一个命令并获取结果,ssh 是你的不二之选。

ssh (Secure Shell)

ssh 是最核心的远程管理工具。

语法: ssh [用户名@]主机名 [命令]

关键点:

  • 如果不提供 [命令],它会为你打开一个交互式的远程 shell。
  • 如果提供了 [命令],它会执行该命令并在本地终端显示其输出,然后立即断开连接。

示例:

  • 登录远程服务器,进入交互式 shell:

    ssh user@remote_server
  • 在远程服务器上执行单个命令,并返回结果:

    # 查看远程服务器的磁盘使用情况
    ssh user@remote_server 'df -h'
    # 查看远程服务器的内核版本
    ssh user@remote_server 'uname -r'
    # 在远程服务器上创建一个目录
    ssh user@remote_server 'mkdir -p /tmp/test_dir'
  • 在远程服务器上执行一个脚本:

    # 本地有一个脚本,先传上去再执行
    scp my_script.sh user@remote_server:/tmp/
    ssh user@remote_server 'bash /tmp/my_script.sh'
    # 或者直接通过管道执行(脚本内容在本地,但执行在远程)
    cat my_script.sh | ssh user@remote_server 'bash'

文件同步

这个场景实际上已经被 rsync 完美覆盖了。rsync 的核心功能就是高效同步。

rsync 的同步特性使其成为自动化备份和部署的黄金标准。

一个典型的自动化备份脚本示例:

#!/bin/bash
# 定义变量
LOCAL_DIR="/var/www/html"
REMOTE_USER="backup_user"
REMOTE_SERVER="backup.server.com"
REMOTE_DIR="/backups/web_$(date +%Y%m%d)"
# 使用 rsync 进行同步
rsync -avz --delete --exclude="*.log" $LOCAL_DIR $REMOTE_USER@$REMOTE_SERVER:$REMOTE_DIR
# 检查 rsync 是否成功
if [ $? -eq 0 ]; then
  echo "Backup successful on $(date)"
else
  echo "Backup failed on $(date)" >&2
fi

这个脚本会:

  1. 将本地的网站目录同步到远程备份服务器。
  2. 创建一个以当前日期命名的备份目录。
  3. --delete 确保备份是完整的。
  4. --exclude="*.log" 排除了所有的日志文件。
  5. 执行后打印成功或失败信息。

总结与选择建议

工具 主要用途 优点 缺点
scp 简单、快速的文件/目录拷贝 简单易记,无需额外配置 无增量传输,效率低,不适合大文件和频繁同步
rsync 高效的文件同步和备份 增量传输,压缩,保留属性,功能强大 参数较多,初学稍复杂
sftp 交互式文件管理 类似 FTP,功能全面(增删改查) 非脚本化,不适合自动化任务
ssh 远程执行命令 最核心的远程管理工具,功能灵活 主要用于命令执行,文件传输需要配合 scp

如何选择?

  • 只想快速传几个小文件? -> scp
  • 需要备份、同步,或者传大文件/目录? -> rsync (强烈推荐)
  • 需要像使用 FTP 客户端一样浏览和管理远程文件? -> sftp
  • 只是想在远程服务器上跑个命令,看结果? -> ssh

在现代运维和开发中,rsyncssh 是最常用、最强大的组合。

分享:
扫描分享到社交APP
上一篇
下一篇