QQ群:397745473
linux用rsync自动备份
rsync与scp的区别主要是rsync可以设置已经存在的文件不需要再次同步。
把156上的文件夹拷贝到本地机器
1 2 3
| rsync -avzu --progress -rsh=ssh mission@10.1.1.156:/home/mission/StationPisPlayer/data/resource .
rsync -avzh --progress -e 'ssh -p 9922 -o StrictHostKeyChecking=no' backupUser@8.8.8.8:/home/backupUser/B/* .
|
服务器A 文件 自动同步到服务器B中, 基本实现步骤:
- 服务器B 创建一个专门用于备份的用户
- 限制服务器B 新建的用户不可访问服务器其他目录
- 服务器A访问服务器B 免密登陆
- 自动备份计划
限定操作目录
限制服务器B 新建的用户不可访问服务器其他目录 先创建目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 参考: https://developer.aliyun.com/article/192985
|
服务器B 创建一个专门用于备份的用户
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
注意:每次向系统添加更多 SSH 用户时,都需要将更新的帐户文件复制到 /home/backup/etc 目录中。
Match User backupUser
ChrootDirectory /home/backup AuthorizedKeysFile /home/backup/.ssh/authorized_keys ForceCommand internal-sftp -p 8822
cp -v /bin/bash /home/backup/bin/ cp -v /bin/ls /home/backup/bin/ cp -v /bin/date /home/backup/bin/ cp -v /bin/mkdir /home/backup/bin/ cp -v /bin/rm /home/backup/bin/ cp -v /bin/sh /home/backup/bin/ cp -v /bin/cat /home/backup/bin/ cp -v /bin/chmod /home/backup/bin/
chroot /home/backup/
ssh backupUser@8.8.8.8 -p 9922
|
服务器A 访问服务器B 免密登陆
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 服务器A 执行如下操作: 1.1 生成 ssh key 密钥对: ssh-keygen -t rsa (按3个回车,密钥对生成在 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub 两个文件)
1.2 把发起端的公钥放到接收端上: ssh-copy-id -i ~/.ssh/id_rsa.pub RemoteUserName@RemoteIP 如: ssh-copy-id -p 9922 -i ~/.ssh/id_rsa.pub backupUser@8.8.8.8
2.终端登录到服务器B,编辑/etc/ssh/sshd_config文件: 2.1 取消下面几行的注释,如果没有就添加 RSAAuthentication yes PubkeyAuthentication yes
2.2 重启sshd服务: /etc/init.d/sshd restart
3.测试免密码登录: ssh RemoteUserName@RemoteIP 参考: ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa <<< y && sshpass -p 'youpassword' ssh-copy-id -i ~/.ssh/id_rsa.pub -p 9922 backupUser@8.8.8.8
|
自动备份计划
从远程同步到本地
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| apt-get -y update;apt-get -y install rsync wget curl tmux vim sshpass htop 注意: rsync 本地服务器A 和远程服务器B中的chroot环境也需要安装
cp -v /usr/bin/rsync /home/backup/bin/ ldd rsync cp -v /lib/x86_64-linux-gnu/{libattr.so.1,libacl.so.1,libpopt.so.0,libc.so.6} /home/backup/lib/ cp -v /lib64/ld-linux-x86-64.so.2 /home/backup/lib64/
rsync -avzu --progress -rsh=ssh mission@10.1.1.156:/home/mission/StationPisPlayer/data/resource . 这是一个用于从远程服务器复制文件到本地的 rsync 命令。命令的各个部分的含义如下:
-a:归档模式,相当于 -rlptgoD 的缩写,其中 r 表示递归,l 表示保留符号链接,p 表示保留权限,t 表示保留时间信息,g 表示保留所有者信息,o 表示保留组信息,D 表示保留设备文件和特殊文件。 -v:详细输出模式。 -z:压缩传输。 -u:只复制源文件中更新或更改过的文件。 --progress:显示传输进度信息。 -rsh=ssh:使用 ssh 作为远程 shell。 mission@10.1.1.156:/home/mission/StationPisPlayer/data/resource:远程服务器上的源文件或目录。 .:本地目标目录,这里表示当前目录。 这个命令将会把远程服务器 10.1.1.156 上的 /home/mission/StationPisPlayer/data/resource 目录中的文件复制到本地当前目录。注意,命令执行时需要输入远程服务器的登录密码
|
从本地同步到远程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| sort -u results/*.txt > "$(date +%Y%m%d).txt"; rsync -avzh /backup/ user@remote:/remote/backup/ rsync -avzh -e 'ssh -p 2222' /backup/ user@remote:/remote/backup/
其中, -a选项表示归档模式,将递归同步所有子目录、文件和权限; -v选项表示详细模式,打印出正在进行的操作; -z选项启用压缩,减少传输数据量; -h选项表示人类可读,输出大小以易于理解的格式; /backup/是本地要同步的目录; user@remote:/remote/backup/是远程服务器的目录,其中user是远程服务器的用户名。
执行此命令后,rsync将显示同步进度和传输速度,并将所有更改复制到远程服务器。 请注意,rsync不会自动删除远程服务器上不存在于本地目录中的文件,这可能导致远程服务器中出现不需要的文件。如果要删除此类文件,可以使用rsync的--delete选项。
在上面的命令中,-e 参数后面跟着的字符串指定了 ssh 远程 shell,并指定了远程主机的端口号为 2222。如果你的远程主机使用不同的端口号,只需要将该命令中的 2222 替换为你的实际端口号即可。
|
修改SSH端口
如果需要修改sshd的端口, 可以参考以下内容
在使用 ChrootDirectory /home/backup
建立 chroot 环境时,会限制 sshd 的权限,导致 sshd 所需的文件和命令不可用。因此,在 chroot 环境中使用 sshd 需要进行特殊的配置。
要解决这个问题,可以在 chroot 中提供必要的文件和命令,如 /usr/bin/rsync
,/bin/bash
,/usr/bin/scp
,/usr/bin/ssh-keygen
,/usr/bin/ssh-add
等。需要将这些文件和命令复制到 chroot 的相应目录中,并且确保它们的依赖库也一并复制进去。
另外,要使得在 chroot 中使用 sshd,需要将其配置文件复制到 chroot 目录中,并将其中的 sshd_config
文件中的 Port
和 AuthorizedKeysFile
选项修改为 chroot 环境下的路径,例如:
1 2 3
| Port 2200 AuthorizedKeysFile /home/backup/.ssh/authorized_keys
|
然后重新启动 sshd 服务即可在 chroot 环境中使用 sshd。
Busybox
docker-compose.yml
1 2 3 4 5 6 7 8 9
| version: '3' services: busybox: image: busybox volumes: - ./data:/data ports: - "8822:22"
|
docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| docker run -itd --name my_container --restart always -p 8822:22 -v $(pwd)/data:/data busybox sh
1. Busybox 安装apk命令 下载 Busybox 对应的 apk 包管理器, 下载地址:https://pkgs.alpinelinux.org/packages?name=apk-tools-static&branch=&repo=&arch=&maintainer= 打开网站找到合适的版本并下载 将下载的 apk-tools-static 包重命名为 apk: $ mv apk-tools-static-2.12.6-r0.apk apk.apk mv sbin/apk.static /usr/local/bin/apk
mkdir -p /etc/apk/keys /bin # wget -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
|
Debian
docker-compose.yml
1 2 3 4 5 6 7 8 9
| version: '3' services: debian: image: debian:latest volumes: - ./data:/data ports: - "8822:22"
|
注意,Debian 镜像默认没有安装 SSH 服务,因此你需要在容器中安装 SSH 服务,以便能够通过端口 8822 进行远程连接。可以使用以下命令安装 OpenSSH 服务器:
1 2
| $ apt-get update $ apt-get install -y openssh-server
|
安装完成后,你可以使用 systemctl start ssh
命令来启动 SSH 服务。在此之前,你可以通过 systemctl status ssh
命令来查看 SSH 服务的运行状态。
docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| docker run -itd --name my_container -p 8822:22 -v $(pwd)/data:/data debian:latest
docker exec my_container apt-get update docker exec my_container apt-get install -y openssh-server sudo net-tools vim rsync docker exec my_container service ssh start
docker exec -it my_container bash passwd root sed -i 's/mouse=a/mouse-=a/g' /usr/share/vim/vim82/defaults.vim
PermitRootLogin yes PasswordAuthentication yes
/etc/init.d/ssh restart
免密登陆操作方法: 1.1 生成 ssh key 密钥对: ssh-keygen -t rsa (按3个回车,密钥对生成在 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub 两个文件)
1.2 把发起端的公钥放到接收端上: ssh-copy-id -i ~/.ssh/id_rsa.pub RemoteUserName@RemoteIP 如: ssh-copy-id -p 9922 -i ~/.ssh/id_rsa.pub backupUser@8.8.8.8
2.终端登录到服务器B,编辑/etc/ssh/sshd_config文件: 2.1 取消下面几行的注释,如果没有就添加 RSAAuthentication yes PubkeyAuthentication yes
2.2 重启sshd服务: /etc/init.d/sshd restart
3.测试免密码登录: ssh RemoteUserName@RemoteIP
|
QQ群:397745473