服务端安装
import os
import subprocess
def install(user, group, pwd):
curpath = os.path.abspath(os.path.dirname(__file__))
subprocess.call("tar -xzvf rsync-3.0.6.tar.gz", shell=True, cwd=curpath)
rsync_path = os.path.join(curpath, "rsync-3.0.6")
subprocess.call("./configure --prefix=/usr/local/rsync --disable-ipv6 --build=arm", shell=True, cwd=rsync_path)
subprocess.call("make && make install", shell=True, cwd=rsync_path)
subprocess.call("ln -s /usr/local/rsync/bin/rsync /usr/local/bin/rsync", shell=True, cwd=rsync_path)
subprocess.call("rm -fr /usr/local/rsync/rsyncd.conf", shell=True, cwd=rsync_path)
subprocess.call("cp {} /usr/local/rsync/".format(os.path.join(curpath, "rsyncd.conf")), shell=True, cwd=rsync_path)
subprocess.call("sed -i 's/uid = root/uid = {}/' /usr/local/rsync/rsyncd.conf".format(user), shell=True, cwd=rsync_path)
subprocess.call("sed -i 's/gid = root/gid = {}/' /usr/local/rsync/rsyncd.conf".format(group), shell=True, cwd=rsync_path)
subprocess.call("sed -i 's/auth users root/auth users {}/' /usr/local/rsync/rsyncd.conf".format(user), shell=True, cwd=rsync_path)
subprocess.call("rm -fr /usr/local/rsync/rsyncd.motd", shell=True, cwd=rsync_path)
subprocess.call("touch /usr/local/rsync/rsyncd.motd", shell=True, cwd=rsync_path)
subprocess.call("rm -fr /usr/local/rsync/rsyncd.secrets", shell=True, cwd=rsync_path)
subprocess.call("echo {}:{} > /usr/local/rsync/rsyncd.secrets".format(user, pwd), shell=True, cwd=rsync_path)
subprocess.call("chmod 600 /usr/local/rsync/rsyncd.secrets", shell=True, cwd=rsync_path)
subprocess.call("chown {}:{} /usr/local/rsync/rsyncd.secrets".format(group, user), shell=True, cwd=rsync_path)
return subprocess.call("/usr/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf", shell=True) == 0
rsyncd.conf
pid file = /var/run/rsyncd.pid
port = 873
uid = root
gid = root
use chroot = no
max connections = 100
timeout 600
lock file = /var/run/rsyncd.lock
log file = /var/run/rsyncd.log
secrets file = /usr/local/rsync/rsyncd.secrets
motd file = /usr/local/rsync/rsyncd.motd
[test]
path = /data/files/
ignore errors
read only = false
write only = false
list = false
hosts allow = *
auth users root
客户端安装
import os
import subprocess
if __name__ == "__main__":
curpath = os.path.abspath(os.path.dirname(__file__))
if subprocess.getstatusoutput("which rsync") == 1:
subprocess.call("tar -xzvf rsync-3.0.6.tar.gz", shell=True, cwd=curpath)
rsync_path = os.path.join(curpath, "rsync-3.0.6")
subprocess.call("./configure --prefix=/usr/local/rsync --disable-ipv6 --build=arm", shell=True, cwd=rsync_path)
subprocess.call("make && make install", shell=True, cwd=rsync_path)
subprocess.call("ln -s /usr/local/rsync/bin/rsync /usr/local/bin/rsync", shell=True, cwd=rsync_path)
user = input("请输入rsync服务访问用户名: ")
passwd = input("请输入rsync服务访问密码: ")
rsync_srv_ip = input("请输入rsync服务ip: ")
rsync_srv_port = 873
rsync_path = "/usr/local/rsync/client"
subprocess.call("mkdir -p {}".format(rsync_path), shell=True)
subprocess.call("echo {} >{}/rsyncd.secrets".format(passwd, rsync_path), shell=True)
subprocess.call("chmod 600 {}/rsyncd.secrets".format(rsync_path), shell=True)
subprocess.call("mkdir -p /data/files", shell=True)
rsync_cron_path = "{}/cron".format(rsync_path)
subprocess.call("mkdir -p {}".format(rsync_cron_path), shell=True)
subprocess.call("rm -fr {}/rsync_client.sh".format(rsync_cron_path), cwd=curpath, shell=True)
subprocess.call("cp rsync_client.sh {}/".format(rsync_cron_path), cwd=curpath, shell=True)
subprocess.call("sed -i 's/root@localhost/{}/' {}/rsync_client.sh".format("{}@{}".format(user, rsync_srv_ip), rsync_cron_path), shell=True)
subprocess.call("chmod +x {}/rsync_client.sh".format(rsync_cron_path), shell=True)
subprocess.call('crontab -l|grep -v "{}"|crontab -'.format("rsync_client.sh"), shell=True)
subprocess.call('(echo "* * * * * {}/rsync_client.sh >>/dev/null 2>&1" ; crontab -l )| crontab -'.format(rsync_cron_path), shell=True)
rsync_client.sh
#!/bin/sh
rsync -vzrtopg --progress --port=873 root@localhost::test /data/files/ --password-file=/usr/local/rsync/rsyncd.secrets