rsync 전에 sudo를 사용하여 ssh를 통해 원격으로 디스크 마운트

rsync 전에 sudo를 사용하여 ssh를 통해 원격으로 디스크 마운트

이 사이트를 검색하는 것은 나에게 매우 도움이 되었지만 한동안 이 문제로 인해 정체되어 있었습니다. 이것이 너무 사소하다면 미리 사과드립니다.

두 개의 CentOS 7 서버 A와 B가 있습니다. 서버 A에서 SSH를 통해 주기적으로 데이터를 서버 B의 디스크로 재동기화해야 하는데, 이 디스크는 대부분 마운트되지 않습니다.측면 cron'ed bash 스크립트~해야 한다마운트 B 사이드 디스크첫 번째.

나는 다른 방법으로 작업하는 것을 고려했지만(B 측 크론 작업이 디스크를 마운트하고 A에서 데이터를 동기화하도록 함) 애플리케이션과 관련된 이유로 A에서 B 방향으로 가는 것이 더 합리적입니다. 즉, B는 rsync할 폴더(수)나 마운트할 디스크를 미리 알지 못합니다. A만이 이 정보를 갖고 있으며 데이터 세트가 일관되고 재동기화 준비가 된 시기를 알고 있습니다.

물론 서버 B의 ssh-LogAsRoot는 옵션이 아니므로 제한된 작업으로 sudo를 사용하는 것을 고려하고 있습니다. 서버 B에서 특정 사용자(rsync_user)를 정의하고 그에게 비밀번호 없이 sudo 마운트 권한을 부여합니다.

[서버B]# cat /etc/sudoers.d/rsync_user.conf
rsync_user ALL=NOPASSWD:/usr/bin/mount /dev/md13 /data_mnt

명령줄에서 원리를 테스트해 보면 다음과 같이 작업이 완료되기를 바랍니다.

[root@serverA]# ssh -i keyfile rsync_user@serverB 'sudo /usr/bin/mount /dev/md13 /data_mnt'
...서버 B에 오신 것을 환영합니다...
[sudo] rsync_user의 비밀번호:

하지만서버 B는 계속 sudo 비밀번호를 요구합니다.

넣어보려고 했는데sudo 마운트....bashrc의 rsync_user 명령을 ssh를 통해 전달하는 대신 동일한 결과를 얻습니다.SSH를 통해 NOPASSWD-sudo를 사용하는 데 제한 사항이 있습니까? 아니면 sudoer 구성 줄에 뭔가가 누락되어 있습니까?

ssh의 -t "pseudo tty" 스위치에 대해 읽고 대화형 세션에서의 사용을 이해했지만 스크립트 연결에서 이것이 어떻게 도움이 되는지 모르겠습니다.

이 단계에서는 rsync_user가 ssh를 통해 서버 B의 텍스트 파일에 플래그를 올리고 서버 B의 루트 작업을 단기 모니터링하는 것과 같이 A와 B 간에 일종의 텍스트 파일 기반 명령/응답 교환을 설정하려고 합니다. 이 플래그는 필요한 디스크를 마운트하고 완료되면 서버 A에 신호를 보내기 위해 감지됩니다. 하지만 이 작업을 수행하는 더 간단하고 내장되어 있으며 안전한 방법이 있다고 확신합니다.

그렇다면 "sudo 마운트" 방법이 올바른 방향으로 가고 있습니까, 아니면 다른 방법을 추천하시겠습니까?

답변1

command나는 그것을 원격에 넣고 .ssh/authorized_keys요청된 경로에 따라 래퍼를 호출하는 옵션을 선택합니다.동기화마운트 디스크를 통과한 다음 (또는 와일드카드가 형편없기 sudo때문에 다른 래퍼를 호출하는 것이 더 좋음 ) base가 나머지 작업을 수행합니다.sudosudoSSH_ORIGINAL_COMMAND

command="sh $HOME/bin/rsync_wrapper" ssh-rsa ... rsync-job

원격 호스트에서 rsync를 호출하는 방법을 살펴봐야 합니다. rsync이 Samba 래퍼의 작동 방식을 배울 수 있습니다.https://www.samba.org/ftp/unpacked/rsync/support/rrsync(즉, rsync 클라이언트는 원격 노드를 호출하고 를 rsync --server --sender -vlogDtpr --partial . <ARGS>통해 액세스할 수 있습니다 SSH_ORIGINAL_COMMAND.)

관련 정보