[Linux基础]-16-使用sftp和rsync进行文件互传
引言
这篇文章介绍替代scp的文件传输命令,sftp/rsync命令速查,覆盖日常最常用的文件传输场景。
文章目录
0×1.sftp传输文件
● 单个文件上传
#上传当前目录下的local.txt到远程服务器192.168.1.233的/root/path/目录,使用远程服务器root用户登陆
#SFTP 非交互式用 <<< $'命令' 避免进入交互界面
987@hk987.xyz:~$ sftp root@192.168.1.233:/remote/path/ <<< $'put local.txt'
● 单个文件下载
987@hk987.xyz:~$ sftp user@host:/remote/path/ <<< $'get remote.txt'
● 上传整个目录
# scp/rsync 加 -r 递归,SFTP 是 put -r
987@hk987.xyz:~$ sftp user@host:/remote/path/ <<< $'put -r local_dir/'
● 下载整个目录
987@hk987.xyz:~$ sftp user@host:/remote/path/ <<< $'get -r remote_dir/'
● 指定 SSH 端口(如 2333)
# scp/SFTP 用 -P(大写),rsync 需通过 ssh -p(小写)指定端口
987@hk987.xyz:~$ sftp -P 2333 user@host:/path/ <<< $'put local.txt'
● 使用断点续传方式(暂不支持)
#可以用lftp或者rsync平替
● 显示传输进度
# rsync --progress 是真正的进度条,体验远优于 scp/SFTP 的 -v 日志
987@hk987.xyz:~$ sftp -v user@host:/path/ <<< $'get bigfile.zip'
● 保留文件权限 / 属性
987@hk987.xyz:~$ sftp -p user@host:/path/ <<< $'get bigfile.zip'
● 使用密钥方式传输
987@hk987.xyz:~$ sftp -v -P 2333 -i ~/.ssh/vssh root@host <<< $'put local.file'
0×2.rsync传输文件
● 单个文件上传
#-avz:a = 归档(保留属性,递归目录)、v=verbose(详细)、z = 压缩传输
#rsync 本身是一个数据同步工具,它默认会尝试使用 rsh(早期的远程 shell,安全性差)作为远程连接方式,
#而 -e 参数的作用就是覆盖这个默认行为,指定用更安全的 ssh 来建立远程连接,所有同步的数据都会通过 SSH 加密传输
987@hk987.xyz:~$ rsync -avz -e ssh local.txt user@host:/remote/path/
● 单个文件下载
987@hk987.xyz:~$ rsync -avz -e ssh user@host:/remote/path/remote.txt ./
● 上传整个目录
# scp/rsync 加 -r 递归,SFTP 是 put -r,因为这里使用了-a参数,包含了-r功能,所以不需要重复指定-r
#(重要)rsync 目录末尾加 / 表示同步目录内文件,不加则同步目录本身
#意思是,如果不加/,那么复制过去后会在/remote/path/下多出一个local_dir文件夹,然后才是local_dir文件夹中的文件
/remote/path/
└── local_dir/
├── file1.txt
└── file2.txt
#如果加上/就仅仅只是复制local_dir下的文件,不会复制目录本身
/remote/path/
├── file1.txt
└── file2.txt
987@hk987.xyz:~$ rsync -avz -e ssh local_dir/ user@host:/remote/path/
● 下载整个目录
987@hk987.xyz:~$ rsync -avz -e ssh user@host:/remote/dir/ ./
● 指定 SSH 端口(如 2333)
# scp/SFTP 用 -P(大写),rsync 需通过 ssh -p(小写)指定端口
987@hk987.xyz:~$ rsync -avz -e 'ssh -p 2333' local.txt user@host:/path/
● 使用断点续传方式
987@hk987.xyz:~$ rsync -avz --partial --progress -e ssh bigfile.zip user@host:/path/
● 显示传输进度
# rsync --progress 是真正的进度条,体验远优于 scp/SFTP 的 -v 日志
987@hk987.xyz:~$ rsync -avz --progress -e ssh local.txt user@host:/path/
● 保留文件权限 / 属性
# rsync -a 已包含权限 / 时间戳保留,无需额外参数
987@hk987.xyz:~$ rsync -avz -e ssh local.txt user@host:/path/
● 使用密钥传输
# 上传 local_dir 到服务器 /home/user/
# SSH 对密钥权限很严格,不然会连不上 chmod 600 ~/.ssh/id_rsa
987@hk987.xyz:~$ rsync -avz -e "ssh -i ~/.ssh/id_rsa" ./local_dir user@192.168.1.100:/home/user/