Czy można przekazać hasło do skryptu powłoki?

11

Długo szukam tego, chciałbym wiedzieć, czy można przekazać hasła w skrypcie powłoki? Wiele odpowiedzi wróciło bez. Niedawno przeczytałem artykuł stwierdzający, jak przekazywać hasła w skrypcie powłoki. Próbowałem tego, ale wydaje się, że to nie działa. To jest link . Czy ktoś może sprawdzić i cofnąć transakcję? Również pls powiedz mi, czy istnieje sposób na podanie hasła w skrypcie powłoki? Jeśli nikt nie powiedział mi, w jaki sposób Linux otrzymuje dane wejściowe do hasła?

karthick87
źródło

Odpowiedzi:

12

Przez „wprowadzanie haseł” prawdopodobnie masz na myśli wprowadzanie danych bez widoczności dla użytkownika.

(sugerowane przez geirha) Korzystając z bash, możesz użyć -sopcji, aby zapobiec wyświetlaniu wpisywanych znaków:

read -p "Password please: " -s pass

Ewentualnie zmień zachowanie terminala, aby ukryć wpisywane znaki za pomocą stty -echo(wyłącz echo). Po odczytaniu hasła z wbudowaną powłoką w readzmienną (w poniższym przykładzie $pass) włącz go ponownie za pomocą stty echo. Ponieważ nowy wiersz z Enterjest ukryty w, musisz wydrukować nowy wiersz, aby uzyskać przyszły wynik w nowym wierszu.

stty -echo
read -p "Password please: " pass
stty echo
printf '\n'

readi printfsą wbudowane w powłokę. sttyjest dostarczany przez coreutilspakiet instalowany domyślnie. Oznacza to, że ten fragment jest bardzo przenośny.

Uwaga: -popcja nie jest standardowa, ale pochodzi z bash. Jeśli chcesz wyświetlić monit w innych powłokach, użyj:

printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'

Bibliografia:

Lekensteyn
źródło
Chcę tylko podać hasło root systemu zdalnego w skrypcie. Czy to możliwe w twoim przypadku?
karthick87
@ karthick87: nie, ten skrypt tylko przechwytuje dane, w które wpisuje się użytkownik. Jeśli chcesz umieścić hasła roota w skryptach, dlaczego nie bierzesz pod uwagę logowania na podstawie klucza?
Lekensteyn
1
Odczyt Basha ma również opcję wyłączenia echa podczas czytania w linii. Zobaczyć help '\read'.
geirha
W zshto osiągalne poprzez read -s 'pw?Prompt text', gdzie pwjest zmienną gdzie hasło zostanie umieszczony i -sjest flaga, aby ukryć wejścia.
baldrs,
2

Do którego programu chcesz przekazać hasło?

Skrypt w linku działa dla mnie. Zauważ, że to nie jest skrypt powłoki, ale skrypt spodziewany (wymaga zainstalowania pakietu expect). Używanie funkcji oczekiwanej jest powszechnym sposobem automatyzacji programów interaktywnych opartych na tekście.

Nieinteraktywne sshloginy są często odbywa się za pomocą klucza uwierzytelniania opartego z pustym hasłem.

Niektóre inne programy (jak sudo) mają opcje odczytu hasła ze standardowego wejścia.

Podanie hasła jako opcji wiersza poleceń jest często problemem bezpieczeństwa, ponieważ w większości systemów każdy użytkownik może zobaczyć procesy innych użytkowników, w tym argumenty wiersza poleceń za pomocą prostych narzędzi, takich jak ps.

Florian Diesch
źródło
Chcę tylko przekazać hasło do programu ssh.
karthick87
Więc może uwierzytelnianie klucza działa dla Ciebie: Użyj, ssh-keygenaby utworzyć klucz uwierzytelnienia (po prostu naciśnij Enter, gdy zostaniesz poproszony o frazę hasła) i skopiuj go do zdalnego użytkownika za pomocą. ssh-copy-idJeśli uwierzytelnianie klucza jest włączone dla sshd (jest to domyślnie), ssh wtedy nie pytać o hasło.
Florian Diesch,
1

Skrypt nigdy tak naprawdę nie powinien obsługiwać haseł. Poproś, aby dowolna aplikacja wymagała hasła, poproś o nią sama, a jeśli nie jest to możliwe, znajdź lepszy sposób uwierzytelnienia w aplikacji. Proszę przeczytać http://mywiki.wooledge.org/BashFAQ/069

geirha
źródło
0

Istnieje sposób na przechowywanie haseł w skrypcie bash, ale musisz zaszyfrować skrypt, aby nikt nie mógł go odczytać ani uruchomić na nim żadnego debugera, aby zobaczyć dokładnie, co robi. Aby zaszyfrować skrypt bash / shell i umożliwić jego wykonanie, spróbuj skopiować i wkleić go tutaj

Na powyższej stronie wystarczy, że prześlesz skrypt (możesz najpierw przesłać przykładowy skrypt dla spokoju ducha). Plik zip zostanie dla Ciebie wygenerowany. Kliknij prawym przyciskiem myszy link do pobrania i skopiuj podany adres URL. Następnie przejdź do pola UNIX i wykonaj następujące kroki.

Instalacja:

   wget link-to-the-zip-file
   unzip the-newly-downloaded-zip-file
   cd /tmp/KingLazySHIELD
   ./install.sh  /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username)  -force 

Powyższe polecenie instalacji zrobi dla Ciebie:

  1. Zainstaluje zaszyfrowany skrypt w katalogu /var/tmp/KINGLAZY/SHIELDX-(your-script-name).

  2. Umieści link do tego zaszyfrowanego skryptu w dowolnym katalogu, który określisz w zamian /home/(your-username)- w ten sposób pozwala ci na łatwy dostęp do skryptu bez konieczności wpisywania ścieżki bezwzględnej.

  3. Zapewnia, ŻE JEDNA nie może modyfikować skryptu - wszelkie próby modyfikacji zaszyfrowanego skryptu sprawią, że nie będzie on działać ... dopóki próby te nie zostaną zatrzymane lub usunięte.

  4. Zapewnia absolutnie, ŻE JEDEN nie może wykonać jego kopii. Nikt nie może skopiować twojego skryptu do ustronnej lokalizacji i spróbować go wkręcić, aby zobaczyć, jak to działa. Wszystkie kopie skryptu muszą być linkami do oryginalnej lokalizacji określonej podczas instalacji.

UWAGA:

Nie wierzę, że to działa w przypadku interaktywnych skryptów, które pytają użytkownika o odpowiedź. Wartości powinny być zapisane na stałe w skrypcie. Szyfrowanie zapewnia, że ​​nikt tak naprawdę nie widzi tych wartości, więc nie musisz się tym martwić.

Uproszczone prace
źródło
-1

możesz po prostu zrobić coś takiego.

# echo -e "password_here\npassword_here" | su user

źródło

fromnaboo
źródło