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.