dodanie hasła do .ssh / config

24

Używam Ubuntu 12.04. Używam ssh do łączenia się z wieloma serwerami codziennie, więc umieszczam ich parametry w pliku .ssh / config ; lubię to :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

Czy istnieje sposób na umieszczenie haseł w tym pliku dla każdego połączenia? Kiedy więc serwer prosi o hasło, terminal umieszcza hasło i wysyła je do serwera, więc nie muszę za każdym razem wpisywać hasła. Nie chcę też używać pary kluczy publiczny / prywatny.

Ajo Augustine
źródło
10
Do tego służą klucze.
Michael Hampton

Odpowiedzi:

31

Nie, nie ma metody określania ani podawania w wierszu poleceń hasła w sposób nieinteraktywny do uwierzytelniania ssh przy użyciu wbudowanego mechanizmu openssh. Przynajmniej nie to, co wiem. Możesz na stałe zakodować hasło, aby oczekiwać skryptu, ale nie jest to również dobre rozwiązanie.

Zdecydowanie chciałbyś użyć par kluczy do uwierzytelniania bez hasła, jak stwierdził Michael, w końcu klucz prywatny jest dość dużym hasłem w pliku.

Danila Ladner
źródło
Chodzi o to, że serwery moich klientów nie pozwalają na logowanie przy użyciu kluczy. Piszę skrypt bash przy użyciu funkcji „Oczekiwanie na logowanie” na wszystkich serwerach, na których przechowywane są poświadczenia n pobrane z urządzenia pamięci USB. Dzięki
Ajo Augustine,
1
Dość niepewny. Jedyną rzeczą, którą można zasugerować w tym skrypcie, aby zablokować ten plik z trudnymi uprawnieniami do pliku.
Danila Ladner
1
Jeśli nie zezwalają na klucze, źle rozumieją, jak działa ssh - zezwolenie na logowanie za pomocą hasła otwiera cię na ataki słownikowe itp. (Choć bardzo, bardzo powolne) - jest prawie niemożliwe, aby osiągnąć to samo za pomocą pary kluczy prywatnych, a jeśli martwisz się, że klucze dostaną się w niepowołane ręce, możesz zaszyfrować hasło do prywatnej części klucza, tak abyś potrzebował dwóch czynników, aby móc z niego skorzystać (hasło może być również zapamiętane w twoim pęku kluczy / przez twojego agenta ssh )
Alex Berry,
Edukuj swoich klientów. Wyjaśnij im, że lepiej jest wyłączyć uwierzytelnianie hasłem i zezwalać tylko na klucze odwrócone.
Nikita Kipriyanov
20

Aby uniknąć ciągu komentarzy: Tak, jest to niepewne (nawet prawdopodobnie niepewne). Gorąco polecam, abyś robił to tylko w sytuacji laboratoryjnej w odizolowanej sieci lub podobnej sytuacji, która nie obejmuje serwerów produkcyjnych lub potencjalnie produkcyjnego serwera bez pełnego resetu / formatu.

Chciałem to skonfigurować, ponieważ nie sądzę, że mój przełącznik 2950 obsługuje klucze prywatne / publiczne i mam nadzieję, że w pewnym momencie zdobędę tę wiedzę, ale jeszcze mnie tam nie ma.

Można to osiągnąć za pomocą aliasu i sshpass.

  1. Zainstaluj sshpass
  2. Zmień plik .ssh / config , aby zawierał nazwę użytkownika wymienioną w pytaniu
  3. Dodaj alias do swojego terminala (użyłem .bashrc i odradzam ustawienia gloabl)
  4. Użyj aliasu, aby zalogować się do celu

Mój przykładowy alias to:

alias ssc='sshpass -pcisco ssh'

Gdzie „cisco” to hasło. Uwaga: nie ma spacji między -p a hasłem.

Zastosowanie to (odniesienie do pytania):

ssc server1

Uwaga: To odpowiada na pytanie w tytule tylko dla tych, którzy korzystają z wyszukiwarek. Jeśli używasz serwerów takich jak w przykładzie pytań, należy użyć pary kluczy prywatny / publiczny, a nie tej odpowiedzi

DarkSheep
źródło
Jedyne możliwe obejście, kiedy naprawdę nie możesz pracować z kluczami z jakiegokolwiek powodu.
sjas
Prace! Niesamowite.
Rahul
Sugerowałbym zastąpienie aliasu pełnym skryptem powłoki; dawałoby to możliwość dynamicznego wyboru pliku haseł do użycia w zależności od parametru hosta.
7heo.tk
Można bardzo dobrze umieścić spację między -p a hasłem, jak to często bywa w przypadku programów cli ...
masterxilo 18.09.18
10

Tak, jak wspomniano powyżej, nie można po prostu zapisać hasła. Polecam użycie klucza ssh do autoryzacji.

najpierw wygeneruj swój klucz:

ssh-keygen

Następnie skopiuj klucz na swoje serwery / komputery stacjonarne:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

To wszystko. Nigdy więcej nie będziesz pytany o hasło.

Zalecam również usunięcie autoryzacji hasła w ogóle, ale to zależy od ciebie.

Str82DHeaD
źródło
1
Dzięki za odniesienie do ssh-copy-id! Kiedyś używałem jakiegoś urządzenia, sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"ale ten program jest czystszy i wyraźnie wyjaśnia intencję.
masterxilo,
3

Nie można tego zrobić za pomocą ssh, jest to tak niepewne, jak to możliwe.

Jak wspomniała Danila, można było użyć skryptów typu oczekiwanie, ale nie zawracałbym sobie głowy.

Zastanawiam się, co próbujesz osiągnąć? Czy chcesz przeskoczyć z jednego serwera na drugi? W takim przypadku chcesz skonfigurować i używać ssh-agent na stacji roboczej oraz włączyć przekazywanie agentów na hostach docelowych; w ten sposób wymiana poświadczeń zostanie skierowana do lokalnego agenta bez konieczności kopiowania klucza prywatnego.

Wir
źródło
VisualStudio ma koncepcję osobistych tokenów dostępu, które są jak hasła specyficzne dla aplikacji, w których ta funkcja byłaby pomocna.
spuder
1

Używam tego skryptu z ~/.local/binkatalogu

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

Co pozwala mi określić hasło jak #PS <password>w .ssh/configpliku.

Ale, jak wszyscy mówią, to lepiej użyć ssh-keysze ssh-agentkiedy jest to możliwe

mnach
źródło
0

Prawidłowym sposobem radzenia sobie z tą sytuacją jest użycie agenta ssh opartego na sesji. Oto jak:

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

Hasło pozostanie ważne przez resztę sesji. Wystarczy tylko raz uruchomić pierwsze polecenie, a następnie można dodać tyle kluczy, ile chcesz. Gdy sesja jest zabijana, tak samo jest z agentem, więc nie ma zakodowanego przechowywania hasła.

Zszokowany, że po tak długim czasie nie było tej odpowiedzi!

pranalli
źródło
Prawdopodobnie dlatego, że plakat nie powiedział, że nie chce używać pary kluczy publiczny / prywatny.
Jenny D mówi Przywróć Monikę
1
Tęskniłem za tym, dziękuję. Następnie dodam, że nieużywanie pary kluczy dla SSH jest naprawdę, bardzo złym pomysłem. Jest bezpieczniejszy ORAZ wygodniejszy ... Zachęcam OP do ponownego rozważenia. Korzystanie z pary kluczy bez hasła jest znacznie bezpieczniejsze niż brak pary kluczy i hasła. Ale idealnie byłoby, gdyby ktoś użył pary kluczy z hasłem i wykonał kroki, które podałem, jeśli / kiedy są w sesji, która wymaga przechowywania hasła.
pranalli
-1

Możesz to zrobić w bezpieczniejszy sposób, używając sshpass

  1. Ustaw swoje hasło bez historii

    eksport PS = twoje_hasło ; historia -d $ (historia 1)

  2. Ustaw alias hosta jak wyżej w ~ / .ssh / config

  3. Użyj ssh pass, aby użyć zmiennej środowiskowej i zaloguj się na wymaganym komputerze za pomocą jednego polecenia

sshpass -p $ PS ssh host_alias

Twoje środowisko przechowuje twoje hasło i ryzykowne jest, że wszystkie uruchomione skrypty mogą wyciec to hasło, jeśli nie wiesz, co uruchomiłeś

ashishWaghmare
źródło
Nie, to nie jest bezpieczne. I to jest dość brzydkie.
7heo.tk
Czy to „rozwiązanie” nie jest dłuższe niż problem? Wszystkie te dodatkowe kroki i nadal musisz pisaćsshpass -p $PS ...
Dan H