Jak skonfigurować SSH, aby nie musiałem wpisywać hasła bez użycia klucza publicznego?

9

Wiem, że są tu dziesiątki pytań na temat łączenia się z serwerem SSH bez wpisywania hasła za każdym razem , a odpowiedź brzmi zawsze: „użyj klucza publicznego”. Cóż, znajduję się w rzadkich okolicznościach, w których tak naprawdę nie ma takiej opcji. Z jakiegoś niewytłumaczalnego powodu demon OpenSSH na serwerze, z którym próbuję się połączyć, jest skonfigurowany

RSAAuthentication no
PubkeyAuthentication no

w /etc/ssh/sshd_config. Nie mam dostępu administracyjnego do serwera, więc nie mogę zmienić tych ani innych opcji konfiguracji serwera. (Oczywiście mam pełną kontrolę nad konfiguracją klienta: OpenSSH 5.8 w systemie Linux).

Jakie są moje opcje, a w szczególności jaka jest najbezpieczniejsza opcja, aby uniknąć konieczności wpisywania hasła za każdym razem, gdy chcę SSH na tym serwerze? Dbam o to, aby moje komputery były dość dobrze zabezpieczone, więc załóżmy, że ryzyko związane z przechowywaniem hasła w pliku na kliencie jest akceptowalnie niskie, jeśli jest to rzeczywiście konieczne.

Inne metody uwierzytelniania, które serwer może zaakceptować, to oczywiście interfejs API GSS (o którym nic nie wiem), interaktywna klawiatura (o której też nic nie wiem) i hasło. Oto kilka odpowiednich opcji konfiguracji:

#ChallengeResponseAuthentication yes

#KerberosAuthentication no

GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

#UsePAM no

a oto -vvślad debugowania ( ):

debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure.  Minor code may provide more information

debug1: Unspecified GSS failure.  Minor code may provide more information

debug2: we did not send a packet, disable method
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug2: we sent a keyboard-interactive packet, wait for reply
debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
David Z
źródło
Czy serwer ma /etc/krb5.keytab? GSSAPI (Kerberos) może być prosty w konfiguracji po stronie klienta; Musiałbym jednak poprosić o nazwę hosta serwera. (Również: keyboard-interactivejest bardzo podobny do password, z wyjątkiem jednego monitu „Hasło:”.)
1686
@grawity Nie /etc/krb5.keytab, ale tak jest /etc/krb5/krb5.keytab. Nie mam dostępu do treści. Nazwa serwera to sftp.pass.psu.edu(nie sądzę, aby było to szkodliwe), jeśli pomoże ci to wyjaśnić procedurę.
David Z
Aah, stary dysk PSU. Takie miłe wspomnienia. Byłem całkiem zadowolony z autoryzacji hasła. Dlaczego nie zapytałeś kampusu informatyki (zamiast CAC, kiedy tam pojechałem) zamiast sięgania po sieć? Chodź, mają lustro Debiana. Nie wszyscy są nieświadomymi administratorami Windows.
Broam
@Broam Nie wyobrażam sobie, żebym pierwszy zapytał, więc przypuszczalnie mają jakiś powód, by tak pozostać ... Przypuszczam, że próba nie zaszkodziłaby.
David Z

Odpowiedzi:

3

W takim przypadku pisanie (lub lepsze nagrywanie) oczekiwanego skryptu byłoby jedną z twoich opcji.

Każdy system jest inny, więc nie będzie skryptu, ale dzięki autoexpect bardzo łatwo jest nagrać skrypt do tego celu.

johnshen64
źródło
Haniebnie niepewny, ale głosowanie za najprostszą i najbardziej bezpośrednią odpowiedzią.
Zac B
Słuszna uwaga. lepiej, aby wszystkie te czynności odbywały się za firewallem i w prywatnej sieci.
johnshen64
8

Z informacji zebranych do tej pory serwer sftp.pass.psu.eduobsługuje uwierzytelnianie Kerberos 5 (GSSAPI) i znajduje się w dce.psu.edudziedzinie.

Kerberos jest bardzo popularny w sieciach z wieloma serwerami i stacjami roboczymi; utworzyło to wiele dużych instytucji edukacyjnych. Jedną z jego zalet w porównaniu z uwierzytelnianiem za pomocą klucza publicznego jest to, że pojedynczy kinitautomatycznie dostarcza poświadczenia dla wszystkich komputerów w dziedzinie Kerberos, bez konieczności kopiowania kluczy publicznych do każdego z nich. Inną jest obsługa protokołu - te same dane uwierzytelniające Kerberos mogą być używane z ponad 30 protokołami (poczta, systemy plików, bazy danych ...), nie tylko SSH.

(W odniesieniu do „nieświadomych administratorów systemu Windows”: dce.psu.edudziedzina wydaje się być oparta na usłudze Active Directory i hostowana przez serwery Windows).

Spróbuj wykonać następujące kroki:

  1. Zaloguj się do Kerberos. ( Narzędzia kiniti klistmogą znajdować się w pakiecie „krb5-user” lub podobnym pakiecie, jeśli nie są jeszcze dołączone do systemu.)

    kinit twoja_nazwa_użytkownika @ dce.psu.edu
    

    Jeśli nie zostaną wyświetlone żadne błędy, logowanie się powiodło. klistpowinien pokazywać element „ krbtgt/dce.psu.edu@...”.

  2. Teraz połącz się z serwerem SSH, z -vvopcjami; jeśli uwierzytelnienie się powiedzie, dobrze.

    Jeśli tak się nie stanie, być może trzeba będzie edytować /etc/krb5.confplik. W [domain_realm]sekcji dodaj następujące informacje:

    [domain_realm]
        .psu.edu = dce.psu.edu
    
  3. Przy domyślnych ustawieniach Krb5 bilet uzyskany w punkcie 1 powinien być ważny przez 10 godzin i przedłużany na tydzień. Nie mogę jednak zweryfikować ustawień.

    Jeśli chcesz zachować hasło w pliku, prosty kinit your_principal < password.txtpowinien działać, chociaż nie jest całkowicie niezawodny.

    Dzięki ktutilniemu można utworzyć „keytab” zamiast hasła.

    $ ktutil
    ktutil: addent -password -p twój_principal -k 1 -e aes256-cts-hmac-sha1-96
    Hasło do twojego_principal : *********
    ktutil: wkt keytab_file 
    ktutil:  CtrlD
    

    i zaloguj się przy użyciu:

    $ Kinit -kt keytab_file  your_principal
    
użytkownik1686
źródło
Wygląda na to, że powinien być dla mnie prawie idealny, ale wydaje się, że nie działa - udało mi się zalogować z Kerberosem (brak komunikatów o błędach), ale wciąż pojawia się monit o hasło. Komunikaty o błędach z ssh -vvsą podobne do śladu, który opublikowałem, z tą różnicą, że debug1: Unspecified GSS failure. Minor code may provide more information\n Server not found in Kerberos databasezamiast tego nie znaleziono pliku pamięci podręcznej referencji.
David Z
Ach, wygląda na to, że „nieświadomi administratorzy systemu Windows” ustawili tablicę klawiszy host/sftp.pass.psu.edu, ale jego prawdziwa nazwa powinna być host/lutz.cac.psu.edu. Możesz obejść ten problem, dodając „ 128.118.2.85 sftp.pass.psu.edu” do / etc / hosts, ale jest to trochę brzydkie - byłoby znacznie ładniej, gdyby administratorzy naprawili serwer ...
1686
Tak, to byłoby ... Zapytam ich o to, ale na razie mam nadzieję, że twoja poprawka powinna załatwić sprawę. Spróbuję jutro.
David Z
@DavidZaslavsky: Warto wspomnieć, że MIT Krb5 v1.10 obsługuje wiele podmiotów głównych hosta (tj. Oba host/lutz.cac.psu.edu i host/sftp.pass.psu.edu) w jednym pliku klucza. (Poprzednie wersje używały tylko pierwszej.)
1686
Przepraszam, zapomniałem wrócić i przekazać opinię na ten temat. Po modyfikacji /etc/hostszgodnie z sugestią dostaję debug1: Unspecified GSS failure. Minor code may provide more information Generic error (see e-text). Nic innego w danych wyjściowych nie ma związku z błędem.
David Z
3

Zastanowiłbym się nad rozwiązaniem mieszanym, w którym hasło wprowadza się tylko raz, a komputer utrzymuje gniazdo dla zdalnego serwera SSH. Możesz wykonać następujące kroki, aby skonfigurować ControlMasterwłaśnie z tego powodu.

roguesys
źródło
Jednak połączenie główne zostanie zresetowane po wyłączeniu klienta. Nie jest to więc idealne rozwiązanie, ale byłaby to niewielka poprawa w stosunku do mojej obecnej sytuacji.
David Z
Służy screendo ochrony powłok przed zakończeniem w przypadku zerwania połączenia lub zawieszenia.
LawrenceC