Chcę skonfigurować zadanie RSync, które łączy się za pośrednictwem SSH.
Mam komputer (backup @ myhost) i host zdalny (test @ remhost) i muszę wykonać kopię zapasową folderu ~ / coś z całą zawartością. Test użytkownika ssh ma dostęp tylko do odczytu dla wszystkich plików i folderów w folderze ~ /. Chcę użyć rsync, aby skopiować folder test @ remhost: ~ / coś do folderu backup @ myhost: ~ / bak.
W tym celu używam następującego polecenia za pośrednictwem BASH na Ubuntu 11.10 (Oneiric):
rsync -avz -e ssh test@remhost:~/something/ ~/bak/
Po wciśnięciu Enter dostaję to:
test@remhost's password:
Wpisuję hasło i rsync działa.
Chcę wykonać powyższe polecenie, aby automatycznie wprowadzić hasło i przekazać je jako parametr lub wprowadzić je automatycznie i rozpocząć zadanie.
Próbowałem wykonać, rsync -avz -e ssh test:password@remhost:~/something/ ~/bak/
ale nadal prosi o hasło i jest denerwujące.
Nie chcę słyszeć o żadnym rodzaju kluczy (RSA, DSA ani żadnego innego). Chcę tylko prostego polecenia, które zaloguje mnie i wykona zadanie.
EDYCJA: Możliwym scenariuszem może być wyłączenie uwierzytelniania za pomocą klucza publicznego i nie można tego zmienić. Np. Jeśli korzystasz z OpenSSH, potrzebujesz uprawnień roota na serwerze, aby edytować plik sshd_config
i dodać PubkeyAuthentication yes
.
EDYCJA: Oto, co w końcu dla mnie zadziałało:
sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/
Należy pamiętać, że ta metoda nie jest uważana za bezpieczną, ponieważ wysyła hasło zwykłym tekstem i jest podatna na ataki typu man-the-the-middle. Zaleca się użycie klucza uwierzytelnienia dla większego bezpieczeństwa.
Odpowiedzi:
może spróbuj sshpass .
wydaje się dość prosty w użyciu ... jest również dostępny przez apt.
Szukałem czegoś takiego, zanim skopiowałem swoje klucze, ale ponieważ mam klucz wszędzie tam, gdzie i tak już go potrzebuję, nie poświęciłem czasu na wypróbowanie tego.
Zwróć jednak uwagę na zastrzeżenie zawarte w tym samouczku dotyczące widoczności hasła.
Dla wszystkich, którzy muszą to zrobić:
źródło
Odmianą rozwiązania, które jest bardziej bezpieczne dla zagrożeń bezpieczeństwa, jest przechowywanie hasła w pliku z ścisłymi uprawnieniami i używanie
-f
flagi zshpass
:Różnica polega na tym, że wyświetlenie listy uruchomionych procesów nie wyświetli hasła w wierszu poleceń, pokaże tylko ścieżkę do pliku, w którym znajduje się hasło.
źródło
Nie wyobrażam sobie żadnej sytuacji, w której uwierzytelnianie za pomocą klucza publicznego bez hasła byłoby lepszym rozwiązaniem dla zautomatyzowanych logowań ssh / rsync.
W każdym razie
expect
powinien być sposobem na osiągnięcie tego, co chcesz zrobić. Nie możesz przesłać hasła do ssh, ale jest to coś bardzo podobnego. Jak to zrobić, odpowiedź tutaj w Stackoverflow .źródło
Odkryłem, że sshpass działa, ale ponieważ termanal mówi,
SSHPASS read: Enter passphrase for key '/home/ubuntu/.ssh/id_rsa':
że musisz uruchomić coś takiego:Gdzie
-P
określa, które zapytanie należy wyszukać, znalazłem to, uruchamiającsshpass -v
i sprawdzając, czy szuka frazy,password
której nie ma.źródło
pierwszą rzeczą jest zrobienie ssh bez
passowrd/bypass
loginu, jak widać, że możemy użyćssh-copy-id -i ./ssh/id_rsa.pub
do namierzania komputera.Po tym teście maszyna może być zdalnie przez ssh bez hasła, a następnie rsync po drodze oczywiście z komputera lokalnego na
target/server
maszynęźródło