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 [email protected]:/abc /def

Co ja robię źle?

Proszę wziąć pod uwagę:

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

Dor
źródło
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://[email protected]:/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.

brm
źródło
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 [email protected]:/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.

Graeme
źródło
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ą!

Eddie
źródło
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.

Arunas Bartisius
źródło
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,