비밀번호를 지정하지 않고 시스템 간 루트 파일 재동기화

비밀번호를 지정하지 않고 시스템 간 루트 파일 재동기화

이것은 나에게 매우 까다로운 것 같습니다.

rsync비밀번호를 지정하지 않고도 두 시스템 간에 파일을 공유 할 수 있도록 두 시스템을 설정했습니다 . 이제 문제 rsyncroot. 내 시스템 모두에는 루트 비밀번호가 없습니다. 루트가 되는 유일한 방법은 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자, 모든 것은 다음과 같은 조건에서 비밀번호를 지정하지 않고 권한이 없는 일반 사용자로서 두 시스템 사이의 루트에 속하는 파일을 어떻게 관리할 것인지에 대한 질문에서 시작되었습니다.

  1. 계정 root은 두 시스템 모두에서 잠겨 있습니다. 즉, 비밀번호가 없습니다 root. 루트가 되는 유일한 방법은 sudo(권장 보안 관행, 참조)http://help.ubuntu.com/community/RootSudo)
  2. 나는 완전히 비밀번호가 없는 것을 원하지 않지만 sudo항상 비밀번호를 입력하고 싶지도 않습니다.
  3. 권한이 없는 일반 사용자가 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

해결책.

  1. 사용자의 SSH 키를 원격 루트에 추가하면 작동하지만 절반만 ​​작동합니다. 즉, 이제 rsyn ... root@remote:...작동합니다. 어려운 부분은 일자리를 구하는 것이기 sudo rsyn ...도 합니다.
  2. 작업을 수행하려면 sudo rsyn ...필요한 것은 sudo 인증을 위해 SSH 에이전트를 사용하는 것입니다.http://www.evans.io/posts/ssh-agent-for-sudo-authentication/
  3. 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.

어쨌든 루트 비밀번호를 생성하고 싶지 않다고 주장하는 경우 이 문제를 해결할 수 있는 유일한 방법은 두 가지 명령을 실행하는 것입니다.

  1. rsync사용자가 쓰기 가능한 디렉터리에 복사하려면 실행하세요 ( mktmp임의의 디렉터리 이름을 만드는 데 사용합니다).

    dir=`mktemp -u`; && sudo rsync -avz /root xpt@remote:$dir
    
  2. 내용을 다음으로 이동하세요.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

관련 정보