如何通过 SSH 使用 Rsync 传输文件
在本教程中,我们将解释如何使用rsync
通过 SSH复制文件。
要求
-
该
rsync
实用程序必须安装在目标系统和源系统上。如果未安装,您可以使用发行版的包管理器安装它:Ubuntu 和 Debian:
sudo apt install rsync
CentOS 和 Fedora:
sudo yum install rsync
-
SSH 访问远程计算机。
-
运行
rsync
命令的用户和远程 SSH 用户必须有相应的权限才能读写文件。
使用rsync将文件传输通过SSH
使用rsync
,您可以通过 SSH 从远程服务器传输文件和目录。
传输文件的一般语法rsync
如下:
Local to Remote: rsync [OPTION]... -e ssh [SRC]... [USER@]HOST:DEST Remote to Local: rsync [OPTION]... -e ssh [USER@]HOST:SRC... [DEST]
其中SRC
是源目录,DEST
目标目录,USER
是远程 SSH 用户名,HOST
是远程 SSH 主机或 IP 地址。
较新版本的 rsync 配置为使用 SSH 作为默认远程 shell,因此您可以省略该-e ssh
选项。
例如,要将单个文件/opt/file.zip
从本地系统传输到 IP 地址为12.12.12.12 的远程系统上的/var/www/目录,您可以运行以下命令:
rsync -a /opt/file.zip [email protected]:/var/www/
该-a
选项代表归档模式,它将递归同步目录、传输特殊和块设备、保留符号链接、修改时间、组、所有权和权限。
如果您尚未设置无密码 SSH 登录到远程计算机,系统将提示您输入用户密码。
如果该文件存在于远程服务器上,它将被覆盖。如果要以不同的名称保存文件,请指定新名称:
rsync -a /opt/file.zip [email protected]:/var/www/file2.zip
要将数据从远程传输到本地机器,请使用远程位置作为源,本地位置作为目标:
rsync -a [email protected]:/var/www/file.zip /opt/
rsync
通过 SSH传输目录与传输文件相同。
重要的是要知道rsync
用斜杠对源目录进行不同的处理/
。当源目录有尾部斜杠时,rsync
只会将源目录的内容复制到目标目录。当省略尾部斜杠时,源目录将被复制到目标目录中。
例如,要将本地/opt/website/images/
目录传输到/var/www/images/
远程计算机上的目录,您可以键入:
rsync -a /home/linuxize/images/ [email protected]:/var/www/images/
--delete
如果要同步本地和远程目录,请使用该选项。使用此选项时要小心,因为如果源目录中不存在目标目录中的文件,它将删除它们。
rsync -a --delete /home/linuxize/images/ [email protected]:/var/www/images/
如果远程主机上的 SSH 正在侦听默认22端口以外的端口,请使用该-e
选项指定端口。例如,如果 SSH 正在侦听3322端口,您将使用以下命令:
rsync -a -e "ssh -p 3322" /home/linuxize/images/ [email protected]:/var/www/images/
当传输大量数据的建议先开启使用Screen会话,在Screen会话中运行rsync命令。使用-P选项,告诉rsync以显示传输过程中的进度条和保持部分传送的文件:
rsync -a -P /home/linuxize/images/ [email protected]:/var/www/images/
结论
我们已经向您展示了如何使用rsync
SSH 来复制和同步文件和目录。
您可能还需要阅读如何排除的文件或目录 用rsync
。
实例演示:
在目标服务器上创建用户名rsyncuser,并在目标主机对应目录赋予权限:
useradd rsyncuser
echo 'R0KhFdxKSgOEelTQIs4HMa28' | passwd --stdin rsyncuser
setfacl -R -m user:rsyncuser:rwx /www/wwwroot/soft.l-t.top/
使用rsync命令将本地/www/wwwroot/soft.l-t.top/内容,发送到[email protected]的服务器上,ssh端口是16926端口
rsync -avzP --delete -e "ssh -p 16926" /www/wwwroot/soft.l-t.top/ [email protected]:/www/wwwroot/soft.l-t.top/
rsync -avzP --delete -e "ssh -p 16926" /www/wwwroot/soft.l-t.top/ [email protected]:/www/wwwroot/soft.l-t.top/ --password-file=/root/rsync.passwd #带密码文件没测试成功
参考文章
https://linuxize.com/post/how-to-transfer-files-with-rsync-over-ssh/