Muszę wykonać rsync
, bez pytania o hasło.
Widziałem na stronie rsync
podrę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 rsync
wciąż pytam o hasło.
export RSYNC_PASSWORD="abcdef"
rsync [email protected]:/abc /def
Co ja robię źle?
Proszę wziąć pod uwagę:
- Rozumiem, że to zły pomysł z punktu widzenia bezpieczeństwa
- Muszę używać tylko
rsync
, nie mogę używać innego oprogramowania - Nie mogę używać uwierzytelniania opartego na kluczach
- Przeczytałem już wiele pytań dotyczących SE, np .:
how-to-pass-password-for-rsync-ssh-command @ stackoverflow.com
rsync-cron-job-with-a-password @ superuser.com
how-to-setup -rsync-without-password-with-ssh-on-unix-linux @ superuser.com
Innymi słowy, muszę mieć RSYNC_PASSWORD
podejście działające! :-)
Odpowiedzi:
Ta zmienna środowiskowa hasła wydaje się być używana tylko podczas korzystania z protokołu rsync:
Aby to zadziałało, musisz również uruchomić rsync jako demon (
--daemon
opcja), co często odbywa się za pomocąinetd.conf
.Podczas korzystania z tego protokołu
abc
powinien odpowiadać celowi zdefiniowanemu w/etc/rsyncd.conf
. Nazwa użytkownika powinna znajdować się wauth users
wierszu dla tego celu, a plik haseł powinien być określony zsecrets file
opcją.To ten plik sekretów zawiera mapowania między nazwami użytkowników i hasłami w następującym formacie:
I to hasło można określić za pomocą zmiennej środowiskowej RSYNC_PASSWORD.
źródło
Jeśli
rsync
demon 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
:Zwróć uwagę na spację na początku polecenia, w
bash
powłoce spowoduje to, że polecenie (i hasło) nie będą przechowywane w historii. Nie polecam używaniaRSYNC_PASSWORD
zmiennej, 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 reset
do wyczyszczenia historii terminali.źródło
sshpass -p $(cat passFile) ..
ukryć czyste przejście w historii bashu, i chmod 400 w trakcie przejścia Plik, aby go zabezpieczyć-p "$RSYNC_PASSWORD"
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_rsa
lub 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.
Możesz także dodawać argumenty,
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
aby nie wymuszać weryfikacji klucza zdalnego hosta. ! Uwaga - to otwiera człowieka w środku ataku i jest ogólną złą praktyką!źródło
~/.ssh
folderu 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)Bardzo przydatne w skryptach jest użycie
--password-file
opcji wiersza poleceń.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.
źródło