rsync
소스에서 대상으로 폴더를 반복적으로 보내는 데 사용합니다 . 직접 bash
명령을 사용하면 비밀번호를 묻는 메시지가 나타납니다. 비밀번호를 묻는 메시지가 표시되는 것을 방지하기 위해 및 를 실행하여 폴더를 대상으로 반복적으로 보내는 스크립트를 cpp
호출하는 간단한 프로그램을 만들었습니다 . 나는 이것을 시도했다bash
rsync
fork
exec
답변, 그러나 오류를 반환합니다.
sudo rsync $args --password-file=rsync_pass -avz /home/user/folder/checkpoints/$1 [email protected]::checkpoints/$1
rsync: failed to connect to 192.xxx.xxx.xxx (192.xxx.xxx.xxx): Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(127) [sender=3.1.3]
노트:--password-file
그냥 옵션 을 사용하고 싶어요
다음 명령을 실행하여 rsync
데몬이 대상 측에서 실행되고 있는지 확인했습니다 sudo systemctl status rsync
. 이 내 꺼야rsyncd.conf
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
port = 12000
[files]
path = /home/public_rsync
comment = RSYNC FILES
read only = true
timeout = 300
어떻게 작동하게 합니까?
답변1
비표준 rsync 포트를 사용하고 있기 때문에 연결이 거부되었습니다. roaima 사용자의 설명을 참조하세요.
public_rsync
단순화를 위해 홈 디렉터리가 있는 사용자가 대상 호스트 /home/public_rsync
(데몬이 실행 중인 192.xxx.xxx.xxx)에 존재하고 서비스가 방화벽에 의해 차단되지 않기를 원합니다 .
다음 예시로 시작하세요 /etc/rsyncd.conf
(나중에 비밀번호 활성화).
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
[checkpoints]
path = /home/public_rsync/checkpoints
comment = RSYNC FILES
read only = false
uid = public_rsync
gid = public_rsync
#auth users = secondaryvm
#secrets file = /etc/rsyncd.secrets
timeout = 300
설명하다:
port = 12000
기본 포트 873을 사용하려면 제거하세요 .- 모듈 이름을
[files]
다음에서 변경하십시오.[checkpoints]
- 모듈 디렉터리의 경로를 다음으로 변경합니다.
/home/public_rsync/checkpoints
- 서버에 파일을 푸시할 수 있도록
read only = true
변경 되었습니다 .false
- 파일을 전송할 때 이 사용자 이름/그룹을 사용하려면
uid
/를 추가하세요 .gid
그런 다음 서버를 다시 시작합니다.
sudo systemctl restart rsync
1. rsync
대상 호스트에서 사용자로 테스트public_rsync
rsync localhost::
모듈 이름과 설명을 반환해야 하는 List all listable module 을 사용하십시오 .[email protected]:~$ rsync localhost:: checkpoints RSYNC FILES
디렉터리를 만들고
checkpoints
그 안에 테스트 파일을 만듭니다.[email protected]:~$ mkdir ~/checkpoints [email protected]:~$ echo helloworld > ~/checkpoints/helloworld.txt
모듈의 모든 파일을 나열합니다.
[email protected]:~$ rsync localhost::checkpoints drwxrwxr-x 4,096 2020/10/30 18:26:01 . -rw-rw-r-- 11 2020/10/30 18:26:01 helloworld.txt
2. rsync
풀/푸시 기능이 제대로 작동하는지 소스 호스트에서 테스트합니다.
인장력 테스트:
$ rsync 192.xxx.xxx.xxx::checkpoints/helloworld.txt /tmp/ $ cat /tmp/helloworld.txt helloworld
테스트 푸시:
$ rsync /tmp/helloworld.txt 192.xxx.xxx.xxx::checkpoints/helloworld_push.txt
checkpoints
모듈 파일을 다시 나열합니다.$ rsync 192.xxx.xxx.xxx::checkpoints drwxrwxr-x 4,096 2020/10/30 18:29:06 . -rw-rw-r-- 11 2020/10/30 18:26:01 helloworld.txt -rw-r--r-- 11 2020/10/30 18:29:06 helloworld_push.txt
3. 인증 활성화
이제 제대로 작동한다는 것을 알았으므로 rsync
대상 호스트에서 인증을 활성화합니다.
/etc/rsyncd.secrets
사용자 이름과 비밀번호가 포함된 텍스트 파일을 만듭니다secondaryvm
(사용자 이름은 임의적이며 사용자 계정이 필요하지 않습니다).[email protected]:~$ sudo tee /etc/rsyncd.secrets > /dev/null <<'EOF' secondaryvm:12345 EOF [email protected]:~$ sudo chmod 600 /etc/rsyncd.secrets
다음에서 서버의 주석 처리를 해제
auth users
하고 다시 시작합니다.secrets file
/etc/rsyncd.conf
[email protected]:~$ sudo systemctl restart rsync
4. 테스트 인증(소스 호스트에서)
자격 증명 없이는 더 이상 연결이 불가능합니다. 비밀번호를 입력해야 합니다.
$ rsync 192.xxx.xxx.xxx::checkpoints
Password:
@ERROR: auth failed on module checkpoints
rsync error: error starting client-server protocol (code 5) at main.c(1675) [Receiver=3.1.3]
연결을 위한 사용자 이름과 비밀번호를 제공하세요.
$ echo '12345' > rsync_pass
$ chmod 600 rsync_pass
$ rsync --password-file=rsync_pass [email protected]::checkpoints
문제가 해결되지 않으면 옵션을 사용하여 세부 정보를 추가 -v
하고 데몬 로그를 확인하세요 /var/log/rsync.log
.