Piszę program powłoki C, który będzie robił su
lub sudo
lub ssh
. Wszyscy chcą, aby ich hasła były podawane na wejściu konsoli (TTY), a nie na stdin lub w wierszu poleceń.
Czy ktoś zna rozwiązanie?
Konfiguracja bez hasła sudo
nie jest opcją.
oczekiwać może być opcją, ale nie ma jej w moim okrojonym systemie.
Odpowiedzi:
W przypadku sudo istnieje opcja -S do akceptowania hasła ze standardowego wejścia. Oto wpis mężczyzny:
Umożliwi to uruchomienie polecenia takiego jak:
Jeśli chodzi o ssh, podejmowałem wiele prób zautomatyzowania / skryptu jego użycia bez powodzenia. Wydaje się, że nie ma żadnego wbudowanego sposobu na przekazanie hasła do polecenia bez pytania. Jak wspominali inni, narzędzie „ oczekiwać ” wydaje się być ukierunkowane na rozwiązanie tego dylematu, ale ostatecznie ustawienie prawidłowej autoryzacji klucza prywatnego jest właściwą drogą do podjęcia próby zautomatyzowania tego.
źródło
nonroot:[email protected]
? Oczywiście rzeczy są znacznie łatwiejsze, jeśli używasz uwierzytelniania klucza i menedżera kluczy.'cat pw | sudo -S <command>
i późniejrm pw
.nc -l 12345 | sudo -S <command>
. Po stronie wysyłającej;echo myPassord | nc <target> 12345
. To po prostu przenosi problem z obsługą hasła, ale prawdopodobnie na konsolę główną, gdzie masz więcej opcji.Napisałem kilka skryptów Applescript, które pytają o hasło w oknie dialogowym, a następnie budują niestandardowe polecenie bash, na przykład:
Nie jestem pewien, czy to pomoże.
Byłoby miło, gdyby sudo zaakceptowało wstępnie zaszyfrowane hasło, więc mógłbym je zaszyfrować w swoim skrypcie i nie martwić się powtarzaniem haseł w postaci czystego tekstu. Jednak to działa dla mnie i mojej sytuacji.
źródło
Dla
ssh
można użyćsshpass
:sshpass -p yourpassphrase ssh user@host
.Musisz tylko najpierw pobrać sshpass :)
źródło
Mam:
Pracuje dla mnie.
źródło
W przypadku sudo możesz to również zrobić:
źródło
Typowym rozwiązaniem tego problemu jest ustawienie aplikacji pomocniczej, która wykonuje zadanie wymagające dostępu administratora: http://en.wikipedia.org/wiki/Setuid
Sudo nie jest przeznaczone do użytku w trybie offline.
Późniejsza edycja: SSH może być używane z uwierzytelnianiem za pomocą klucza prywatnego i publicznego. Jeśli klucz prywatny nie ma hasła, można użyć ssh bez pytania o hasło.
źródło
Można to zrobić, ustawiając klucze publiczne / prywatne na hostach docelowych, z którymi będziesz się łączyć. Pierwszym krokiem byłoby wygenerowanie klucza ssh dla użytkownika uruchamiającego skrypt na hoście lokalnym, wykonując:
Następnie wprowadź puste hasło. Następnie skopiuj swój klucz ssh na docelowy host, z którym będziesz się łączyć.
Po zarejestrowaniu kluczy ssh, możesz wykonać wyciszenie
ssh remote_user@other_host
z lokalnego hosta.źródło
Może możesz użyć
expect
polecenia ?:To polecenie automatycznie podaje hasło.
źródło
Kiedy nie ma lepszego wyboru (jak sugerują inni), wtedy man socat może pomóc:
Cała złożoność pty, setid, ctty jest konieczna i chociaż możesz nie potrzebować spać tak długo, będziesz musiał spać. Warto też przyjrzeć się opcji echo = 0, podobnie jak przekazywaniu zdalnego polecenia w wierszu poleceń ssh.
źródło
su
.su
nie ma opcji -S (stdin).Spójrz na
expect
narzędzie linux.Umożliwia wysyłanie danych wyjściowych do stdio w oparciu o proste dopasowywanie wzorców na stdin.
źródło
Skonfiguruj protokół SSH do uwierzytelniania za pomocą klucza publicznego, bez hasła w kluczu. Mnóstwo prowadnic w sieci. Nie będziesz wtedy potrzebować hasła do logowania. Następnie można ograniczyć połączenia dla klucza na podstawie nazwy hosta klienta. Zapewnia rozsądne bezpieczeństwo i doskonale nadaje się do automatycznego logowania.
źródło
źródło
Miałem ten sam problem. skrypt dialogowy do tworzenia katalogu na zdalnym komputerze. dialog z ssh jest łatwy. Używam sshpass (wcześniej zainstalowanego).
pozdrowienia z Niemiec
Titus
źródło
Opierając się na odpowiedzi @ Jahid, działało to dla mnie w systemie macOS 10.13:
źródło
lepszą
sshpass
alternatywą jest:passh
https://github.com/clarkwang/passhZaloguj się do zdalnego serwera
Uruchom polecenie na serwerze zdalnym
inne metody przekazywania hasła
tutaj wyjaśniłem, dlaczego jest lepszy niż sshpass i inne rozwiązania.
źródło
To działa.
źródło
su
, który zamiast tego odczytuje hasło ze stdio .Zakodowanie hasła na sztywno w skrypcie oczekiwania jest takie samo jak posiadanie sudo bez hasła, a właściwie gorzej, ponieważ sudo przynajmniej rejestruje swoje polecenia.
źródło
Jednym ze sposobów byłoby użycie opcji read -s ... w ten sposób znaki hasła nie są wyświetlane na ekranie. Napisałem mały skrypt dla niektórych przypadków użycia i możesz go zobaczyć na moim blogu: http://www.datauniv.com/blogs/2013/02/21/a-quick-little-expect-script/
źródło
POSŁUGIWAĆ SIĘ:
Przykład:
Mam nadzieję, że to pomoże..
źródło
Możesz podać hasło jako parametr, aby oczekiwać skryptu.
źródło
Mam nadzieję, że to jest pomocne.
źródło