rsync przez ssh: czy hasło ssh można wprowadzić w linii poleceń?

3

Widzę, że możesz utworzyć klucz SSH, aby używać rsync przez ssh bez podania hasła.

Ale używam rsync przez ssh w Eclipse / ANT, gdzie hasło można wprowadzać interaktywnie, ale wtedy interakcja między eclipse a poleceniem rsync nie jest interaktywna (jest to jedno wywołanie linii poleceń), więc musiałbym określić hasło uzyskane w eclipse w linii poleceń.

czy to możliwe?

davidparks21
źródło
1
Umieszczanie haseł w wierszach poleceń jest z natury niebezpieczne, ponieważ wszystkie wiersze poleceń są publiczne dla wszystkich użytkowników komputera ( ps -ef ). Nie rób tego.
ceving
Dobry punkt, dzięki za to. Ale to jest po prostu skrypt ant działający w moim systemie dev. Uważam, że jest o wiele bardziej prawdopodobne, że ktoś otrzyma plik klucza, który jest trwale przechowywany, automatycznie tworzony w sieci i prawdopodobnie zapomniany, niż ktoś odbiera hasło Polecenie ps w ciągu 5 sekund, przez które skrypt może być uruchomiony.
davidparks21
Właściwie pracuję nad używaniem oczekiwanej obsługi interaktywnej części hasła, myślę, że to może być najlepsza odpowiedź, ale po drodze natknąłem się na kilka blokad drogowych.
davidparks21
1
Możesz chronić swój plik klucza za pomocą hasła i możesz użyć ssh-agent, aby otworzyć klucz do sesji programowania.
ceving

Odpowiedzi:

3

Po gorącej walce między mną a komputerem, w końcu mam odpowiedź, która nie została omówiona w żadnym artykule, który mógłbym znaleźć. Opublikuję na ten temat bloga.

Rozwiązaniem jest użycie nowej funkcji naprawionej tylko w wersji alpha ant 1.8.3, która wydaje się być poprawką w stosunku do wersji 1.8.2, więc prawdopodobnie jest wystarczająco stabilna nawet z tytułem alfa. Ta funkcja umożliwia przekazywanie danych do STDIN skryptu, a mianowicie hasła. Następnie możesz użyć standardowych narzędzi linux lub cygwin na Windows read hasło wyłącz STDIN i użyj go jako zmiennej.

Brak zależności , brak plików kluczy, brak wyciekającego hasła w wierszu poleceń, brak zapisanych haseł. W końcu widzę trochę światła poza mroczną, ponurą egzystencją, której doznałem w ciągu ostatnich kilku dni.

Oto zadanie ANT, które właśnie to robi:

<input message="Enter username for ${website.host}:" addproperty="host.username" />
<input message="Enter password for ${website.host}:" addproperty="host.password" />

<sshexec host="${website.host}" trust="true"
         username="${host.username}" password="${host.password}"
         inputstring="${host.password}"
         command='read var; expect -c "spawn sudo chmod u+x /usr/local/website/bin/start_website" -c "expect ${host.username}:" -c "send ${var}\r" -c "wait"' />

Zwróć uwagę na wiersz polecenia:

read var; expect -c "spawn sudo chmod u+x /usr/local/website/bin/start_website" -c "expect ${host.username}:" -c "send ${var}\r" -c "wait"

Najpierw, my read STDIN na zmienną var. Potem strzelamy expect który wykonuje pewne czynności wymagające interakcji użytkownika: sudo w tym przypadku. Gdy sudo monituje o hasło, które wysyłamy z przechowywanej zmiennej var i wait aby proces się zakończył.

davidparks21
źródło
0

Ponieważ obie maszyny będą Ci znane, możesz bezpiecznie zignorować hasło od indywidualnego użytkownika, a następnie:

  1. nadaj użytkownikowi sudo prawa do rsync rsync, aby uzyskać dostęp do wszystkiego

  2. ustaw klucz prywatny / bez hasła zaloguj się używając tego użytkownika rsync z komputer zdalny i wywołanie rsync z sudo przez ssh

W ten sposób hasło nie będzie miało znaczenia, a będziesz bardziej bezpieczny.

White Label Online Backup
źródło
0

Możesz po prostu użyć ssh-agent i keychain.

hornetbzz
źródło