Jak mogę rsync bez pytania o hasło, bez uwierzytelniania za pomocą klucza publicznego?


44

Muszę wykonać rsync, bez pytania o hasło.

Widziałem na stronie rsyncpodręcznika, że ​​nie pozwala na określenie hasła jako argumentu linii poleceń.
Zauważyłem jednak, że umożliwia określenie hasła za pomocą zmiennej RSYNC_PASSWORD.

Próbowałem więc wyeksportować zmienną, ale rsyncwciąż pytam o hasło.

export RSYNC_PASSWORD="abcdef"
rsync root@1.2.3.4:/abc /def

Co ja robię źle?

Proszę wziąć pod uwagę:

Innymi słowy, muszę mieć RSYNC_PASSWORDpodejście działające! :-)


czy włączyłeś demona rsync na zdalnym serwerze?
— Rahul Patil

Odpowiedzi:


13

Ta zmienna środowiskowa hasła wydaje się być używana tylko podczas korzystania z protokołu rsync:

rsync rsync://username@1.2.3.4:/abc /def

Aby to zadziałało, musisz również uruchomić rsync jako demon ( --daemonopcja), co często odbywa się za pomocą inetd.conf.

Podczas korzystania z tego protokołu abcpowinien odpowiadać celowi zdefiniowanemu w /etc/rsyncd.conf. Nazwa użytkownika powinna znajdować się w auth userswierszu dla tego celu, a plik haseł powinien być określony z secrets fileopcją.

To ten plik sekretów zawiera mapowania między nazwami użytkowników i hasłami w następującym formacie:

username:password

I to hasło można określić za pomocą zmiennej środowiskowej RSYNC_PASSWORD.


szybki sposób na uruchomienie serwera rsync to https://s3.amazonaws.com/skaperen/rsend
— Skaperen

65

Jeśli rsyncdemon nie działa na komputerze docelowym i nie zależy Ci na udostępnianiu haseł wszystkim osobom na komputerze lokalnym ( dlaczego ktoś nie powinien używać haseł w wierszu poleceń? ), Możesz użyć sshpass:

 sshpass -p "password" rsync root@1.2.3.4:/abc /def

Zwróć uwagę na spację na początku polecenia, w bashpowłoce spowoduje to, że polecenie (i hasło) nie będą przechowywane w historii. Nie polecam używania RSYNC_PASSWORDzmiennej, chyba że jest to absolutnie konieczne (jak w poprzedniej edycji tej odpowiedzi), zalecam wyłączenie przechowywania historii lub przynajmniej wyczyszczenie historii później. Ponadto możesz użyć tput resetdo wyczyszczenia historii terminali.


2
Dlaczego sugerowałbyś dodanie do polecenia czystego hasła, to zły administrator linux 101.
— Eddie

Super przydatny ... od jakiegoś czasu szukałem podejścia do tego. Dziękuję Ci.
— Isaac Gregson

6
Chociaż źle jest dodać hasło jako zwykły tekst, jest to obecnie jedyny rozsądnie prosty sposób.
— Weston Ganger,

15
zawsze możesz zrobić coś takiego: sshpass -p $(cat passFile) ..ukryć czyste przejście w historii bashu, i chmod 400 w trakcie przejścia Plik, aby go zabezpieczyć
— Kresimir Pendic

3
Wiem, że to stare, ale ze względu na nowych czytelników proszę podać hasło - hasła mogą zawierać znaki specjalne i spacje. -p "$RSYNC_PASSWORD"
— Paddy Landau

16

Możesz użyć standardowych tożsamości ssh, aby zalogować się bez hasła. Jest to obsługiwane domyślnie, jeśli masz taki ~/.ssh/id_rsalub podobny, ale możesz także na stałe zakodować własną ścieżkę do klucza prywatnego autoryzowanej pary kluczy.

Umożliwia to wykonywanie zadań wsadowych / skryptów bez ujawniania haseł, a klucz publiczny można usunąć z serwera docelowego, jeśli kiedykolwiek zostanie naruszony klucz prywatny.

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/

Możesz także dodawać argumenty, -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nullaby nie wymuszać weryfikacji klucza zdalnego hosta. ! Uwaga - to otwiera człowieka w środku ataku i jest ogólną złą praktyką!


1
Jest to szczególnie przydatne, jeśli używasz nowej powłoki Bash dla Windows 10. Zastanawiałem się, dlaczego rsync nie działał bez hasła. Uświadomiłem sobie, że używa ~/.sshfolderu wewnątrz powłoki (gdzie mieszka rsync). Gdy użyłem -e, aby wskazać klucz w środku /mnt/c/Users/MyUsername/.ssh, zadziałało to zgodnie z oczekiwaniami. (Dzięki.: D)
— Toby Deshane

12

Bardzo przydatne w skryptach jest użycie --password-fileopcji wiersza poleceń.

  • Utwórz pusty plik o nazwie rsync_pass
  • wpisz hasło do tego pliku (nic więcej)
  • chmod 600 rsync_pass
  • rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory

Można to wykorzystać do tworzenia skryptów i pozwala być bardziej bezpiecznym niż eksportowanie hasła do zmiennej systemowej.


4
Uwaga dla czytelnika: wymaga to również demona rsync działającego na serwerze. Naprawdę miałem nadzieję, że klucze ssh będą wystarczające dla rsync bez hasła.
— Sridhar Sarnobat

IMHO jest to jedyny właściwy sposób, aby to zrobić, jeśli nie chce się używać ssh.
— maxf130

Ta odpowiedź jest najbardziej sensowna
— AJ Meyghani,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.