
이것은 나에게 매우 까다로운 것 같습니다.
rsync
비밀번호를 지정하지 않고도 두 시스템 간에 파일을 공유 할 수 있도록 두 시스템을 설정했습니다 . 이제 문제 rsync
는 root
. 내 시스템 모두에는 루트 비밀번호가 없습니다. 루트가 되는 유일한 방법은 sudo
. 따라서 에 대한 비밀번호를 제공할 수 없으며 sudo rsyn local root@remote:
ssh-agent를 사용하여 비밀번호 문구를 제공할 수 없습니다. 어떤 시스템에서도 루트 비밀번호를 설정하고 싶지 않습니다. 그리고 두 시스템 모두에서 루트가 파일을 소유해야 합니다.
편집하다: 속한 파일을 사용하는 것은 root
단지 예일 뿐이므로 권한이 없는 계정에서 시스템(루트 소유 포함) 파일을 쉽게 읽고 쓸 수 있는 방법이 필요합니다. 한 가지 예는 구성된 /root 환경을 새로 설치된 시스템에 복사하는 것입니다. 두 시스템은 실제로 단일 호스트 아래에 있는 두 개의 VM이므로 둘 사이에 루트 소유 파일을 복사하는 것은 큰 문제가 되지 않습니다.
편집 2: 구성된 /root 환경을 새로 설치된 시스템에만 복사하려면 tar를 사용할 수 있습니다.
sudo tar cvzf - /root | ssh me@remote sudo tar xvzf - -C /
rsync
하지만 수시로 업데이트 해야 합니다 . 그것을 가능하게 하는 쉬운 방법이 있나요?
편집 3: 공식적으로 질문을 공식화합니다.
rsync
자, 모든 것은 다음과 같은 조건에서 비밀번호를 지정하지 않고 권한이 없는 일반 사용자로서 두 시스템 사이의 루트에 속하는 파일을 어떻게 관리할 것인지에 대한 질문에서 시작되었습니다.
- 계정
root
은 두 시스템 모두에서 잠겨 있습니다. 즉, 비밀번호가 없습니다root
. 루트가 되는 유일한 방법은sudo
(권장 보안 관행, 참조)http://help.ubuntu.com/community/RootSudo) - 나는 완전히 비밀번호가 없는 것을 원하지 않지만
sudo
항상 비밀번호를 입력하고 싶지도 않습니다. - 권한이 없는 일반 사용자가 SSH 에이전트에 SSH 암호 문구를 입력했습니다.
감사해요
답변1
옵션 을 사용하여 창의적인 rsync로 직접 수행할 수 있습니다 --rsync-path
. 따라서 다음을 사용합니다.
rsync -a -e "ssh" --rsync-path="sudo rsync" localdir/ [email protected]:/remotedir
이를 위해서는 원격 호스트의 "sudo rsync"가 암호를 요구하지 않아야 합니다. 이는 여러 가지 방법으로 수행할 수 있습니다.
- rsync를 실행하기 전에 원격에서 수행합니다
sudo -v
(일회성 rsync 작업에 이상적).tty_tickets
이것이 작동하려면 sudo에서 옵션을 사용하면 안 됩니다 . - 원격 호스트에
username ALL= NOPASSWD:/usr/bin/rsync
넣기 ./etc/sudoers
- 사용하여pam-ssh-에이전트-인증원격으로
/etc/pam.d/sudo
물론 "ssh를 통한 rsync" 대신 "데몬 모드의 rsync"(예: Debian GNU/Linux 참조)를 사용하여 원하는 작업을 수행할 수도 rsyncd.conf(5)
있으며 /etc/default/rsync
전송 속도도 향상됩니다.
답변2
해결책.
- 사용자의 SSH 키를 원격 루트에 추가하면 작동하지만 절반만 작동합니다. 즉, 이제
rsyn ... root@remote:...
작동합니다. 어려운 부분은 일자리를 구하는 것이기sudo rsyn ...
도 합니다. - 작업을 수행하려면
sudo rsyn ...
필요한 것은 sudo 인증을 위해 SSH 에이전트를 사용하는 것입니다.http://www.evans.io/posts/ssh-agent-for-sudo-authentication/ - Ubuntu에 pam-ssh-agent-auth PAM 모듈을 설치하려면 제가 방금 구축한 ppa를 사용할 수 있습니다.https://launchpad.net/~suntong001/+archive/ppa. Ubuntu 12.04에서는 정확하고 13.10에서는 잘 테스트되었습니다.
HTH
답변3
또 다른 방법은 rsync 스크립트를 포함하는 두 서버 모두에 .sh 스크립트를 만드는 것입니다.
그런 다음 cronjob 또는 ssh를 통해 실행하십시오.
ssh not-your-root-user@remoteserver sudo sh your-rsync-script.sh
아니면 SSH를 통해 직접 rsync 스크립트를 실행하세요.
ssh not-your-root-user@remoteserver sudo rsync local root@remote
예약된 rsync 작업인 경우 cronjob을 선호합니다.
답변4
글쎄요, 당신이 무엇을 하고 싶은지에 달려 있습니다. 두 시스템 모두에서 파일을 루트가 소유해야 합니까? 단순히 백업을 수행하는 경우에는 rsync
루트로 실행할 수 있지만 일반 사용자로 원격 서버에 로그인할 수는 없습니다 .
root
원격 일반 사용자로 로그인하기 위해 로컬용 키를 생성합니다 ( xpt
일반 사용자 이름으로 사용하겠습니다).
sudo -i
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub xpt@remote
이제 다음과 같이 비밀번호 없이 ssh
또는 rsync
(루트로) 작업을 수행할 수 있습니다.
rsync /path/to/local xpt@remote
두 시스템 모두에서 루트가 파일을 소유해야 하는 경우 상황이 좀 더 복잡해집니다. 가장 쉬운 방법은 두 시스템 모두에 루트 비밀번호를 설정하는 것입니다.
sudo -i
passwd
이제 하트 콘텐츠에 루트로 로그온할 수 있습니다.
물론,최상의해야 할 일은루트로 네트워크를 통해 파일을 복사하지 않음. 왜 당신이 원할지 상상할 수 없으며 위험은 실제로 노력할 가치가 없습니다. 파일을 복사하고 sudo
복사한 후에 필요에 따라 재생하면 됩니다.
업데이트:
이를 수행하는 가장 간단한 방법은 각 시스템에 대한 루트 비밀번호를 만든 다음 루트로 복사하는 것입니다. 왜 이것을 원하지 않는지 이해할 수 없습니다. 실행만큼 간단합니다 sudo passwd
.
어쨌든 루트 비밀번호를 생성하고 싶지 않다고 주장하는 경우 이 문제를 해결할 수 있는 유일한 방법은 두 가지 명령을 실행하는 것입니다.
rsync
사용자가 쓰기 가능한 디렉터리에 복사하려면 실행하세요 (mktmp
임의의 디렉터리 이름을 만드는 데 사용합니다).dir=`mktemp -u`; && sudo rsync -avz /root xpt@remote:$dir
내용을 다음으로 이동하세요.
remote:/root
ssh -t lacoloc@badabing sudo rsync -avz "$dir"/* /root
이 옵션은 tty 할당을 강제하며 원격 시스템에서 명령을
-t
실행하는 데 필요합니다 .sudo
이것을 파일에 추가하여 두 가지를 결합할 수 있습니다 ~/.bashrc
(bash를 사용하지 않는 경우 알려주세요).
function Rrsync(){
dir=`mktemp -u` &&
sudo rsync -avz $1 $2:$dir &&
ssh -t $2 sudo rsync -avz $dir/ $3 && rm -rf $dir
}
그런 다음 다음과 같이 함수를 호출할 수 있습니다.
Rrsync /root xpt@remote /root
------ ----- ---------- -----
| | | |---> The target directory on the remote server
| | |------------> username@server
| |--------------------> Path to local source directory
|--------------------------> The function name
/
디렉터리를 복사하는지 또는 디렉터리의 내용을 복사하는지에 따라 rsync 소스 및 대상에서 후행 슬래시를 추가/제거하는 작업을 수행해야 할 수도 있습니다 . 보다 man rsync
.
비밀번호 없이 이 작업을 수행하려면 맨 처음에 설명한 대로 루트로 ssh-keygen
실행 해야 합니다. 로컬 컴퓨터와 원격 컴퓨터에 각각 하나씩, ssh-copy-id
두 명령에 대한 비밀번호를 입력해야 합니다 .sudo