Nie można zmusić rsync do działania w trybie daemon-over-ssh

11

Próbuję skonfigurować rsync, aby codziennie kopiował dane z serwera. Aby maksymalnie ograniczyć system, próbuję użyć trybu opisanego na stronie podręcznika jako: „KORZYSTANIE Z FUNKCJI RSYNC-DAEMON ZA POMOCĄ POŁĄCZENIA ZDALNEGO-SHELL”

Więc umieściłem plik o nazwie rsyncd.conf w folderze głównym katalogu głównego:

[root]
path = /
read only = true

i próbował skopiować / etc / passwd jako test:

rsync -vv -e ssh myserver::root/etc/passwd .

Ale dostaję następujące:

opening connection using: ssh myserver rsync --server --daemon . 
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [receiver=3.0.3]

Powodem, dla którego to wszystko robię, jest to, że kiedy zacznę działać, planuję ograniczyć dostęp poprzez podanie polecenia

rsync --server --daemon .

w ~ / .ssh / Author_keys

rjmunro
źródło
Co jest zalogowane / var / log / secure lub / var / log / messages na serwerze odbierającym?
Dave Cheney
To było: rsync: nie można otworzyć pliku konfiguracyjnego „/etc/rsyncd.conf”: Brak takiego pliku lub katalogu (2) Dzięki, to doprowadziło do rozwiązania, które opublikuję jako odpowiedź.
rjmunro

Odpowiedzi:

11

Wygląda na to, że jest błąd w dokumentacji lub wszczepienie rsync. man rsync mówi:

Rsync obsługuje łączenie się z hostem za pomocą zdalnej powłoki, a następnie odrodzenie jednorazowego serwera „demona”, który spodziewa się odczytać swój plik konfiguracyjny w katalogu domowym zdalnego użytkownika.

ale podczas łączenia się z rootem, zgodnie z / var / log / messages, szukał pliku konfiguracyjnego /etc/rsyncd.conf (standardowa lokalizacja pliku rsyncd.conf, gdy nie jest używany przez SSH.

Musiałem zmusić serwer ssh do użycia właściwego pliku konfiguracyjnego poprzez dodanie

command="rsync --config=/root/rsyncd.conf --server --daemon ."

do /root/.ssh/authorized_keys.

Powodem, dla którego nie po prostu umieściłem konfiguracji w domyślnej lokalizacji, jest to, że nie chciałem, aby ktoś przypadkowo uruchomił normalnego demona rsync - chcę, aby demon miał tak duży dostęp, gdy ma prawidłowy klucz ssh.

rjmunro
źródło
5

rsync w trybie demona nie jest tym, co sugerowałbym, jeśli chcesz go mocno zablokować. Chcesz ograniczyć polecenie uruchamiania klucza SSH i wywołać polecenie kopiowania za pomocą tego klucza.

Aby dowiedzieć się, do którego polecenia ograniczyć klucz, uruchom odpowiedni wiersz polecenia rsync z niewielką modyfikacją polecenia ssh:

rsync -avz -e 'ssh -v' stuff somewhere:/place

Zobaczysz wiersz w danych wyjściowych debugowania, taki jak:

debug1: Sending command: rsync --server -vlogDtprze.iLs . /place

Właśnie to polecenie jest tym, co chcesz ograniczyć klucz, aby mógł działać w .ssh / Author_Key:

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=
MikeyB
źródło
3
Chcę być w stanie wykonywać różne kopie zapasowe tylko do odczytu części systemu - np. Kopie zapasowe wiadomości e-mail i baz danych SQL codziennie, ale inne rzeczy raz w tygodniu. Potrzebowałbym konkretnego polecenia i określonego klucza dla każdej możliwej kopii zapasowej i nie byłbym w stanie wykonać dodatkowych kopii zapasowych ad-hoc przy tej samej infrastrukturze.
rjmunro
2
W porządku - biorę „Aby maksymalnie ograniczyć system” dosłownie :)
MikeyB
1
Możesz umieścić wiele poleceń w skrypcie i przekazać skryptowi parametry jako dane wejściowe w pierwszym wierszu.
alecco,
1
czy istnieje sposób na wygenerowanie numeru seryjnego polecenia bez konieczności przeglądania informacji o debugowaniu? „-vlogDtprze.iLs”
qodeninja