Jak mogę na stałe zapisać klucz SSH chroniony hasłem?


9

Korzystam z Awesome Window Manager

Jak mogę na stałe dodać klucze prywatne za pomocą hasła?

Zainspirowany odpowiedź tutaj dodałem klucze prywatne w ~ / .ssh / config

Zawartość ~ / .ssh / config:

IdentityFile 'private key full path'

Uprawnienia ~ / .ssh / config: 0700

Ale to nie działa dla mnie.

Jeśli ręcznie dodam klucz w każdej sesji, działa, ale szukam bardziej eleganckiego sposobu (nie w .bashrc)

EDYCJA :

  • Korzystanie z wersji Gnome classic (bez efektów).

Po dodaniu klucza SSH ssh-copy-ifdo zdalnego hosta pojawia się następujący komunikat w terminalu (GNOME Terminal 3.0.1) podczas logowania:

ssh -i .ssh/Password-Protected-Key user@host
Enter passphrase for key '.ssh/Password-Protected-Key':
  • Korzystanie z Awesome Window Manager v3.4.10. Już miałem, gnome-keyring-dameonwięc zabiłem drugi pid i uruchomiłem gnome-keyring-daemon --start | grep SOCK(dodałem go również w .profile) wyjście (grep):

SSH_AUTH_SOCK=/tmp/keyring-2LXXXX/ssh

Wykonałem dokładnie te same kroki i podobnie nie mam okna dialogowego dodawania ssh do GUI.

EDYCJA 2 :

Utworzyłem nowy klucz chroniony hasłem z maszyny wirtualnej Ubuntu 11.10 na jedności i nadal nie mogę uzyskać żadnego hasła.

EDYCJA 3 : Wygląda na to, że to nie działa w Awesome menadżer okien :( i prawdopodobnie inne ..


1
Po co dodawać klucz SSH chroniony hasłem? Pokonuje cel ...
MarkovCh1

3
@Szyzygy Czy zawsze wpisujesz hasła z różnych usług i aplikacji, czy używasz kluczy do odblokowania hasła za pomocą hasła logowania?
pl1nk

Jeszcze jakieś przemyślenia / pytania, pl1nk? Bounty okres karencji wygasa już wkrótce :-)
owski

@izx Sprawdziłem wszystko, o czym wspomniałeś i wszystkie są zgodne z oczekiwaniami. Jak wspomniałem w mojej aktualizacji, użyłem również Gnome. Czy mam zgłosić błąd?
pl1nk

Można znaleźć kilka wskazówek tutaj . Wygląda na to, że kolejność, w jakiej wszystko się zaczyna, jest ważna, a dla gnome-keyring-daemon także ważne jest, aby dostać się do dbus.
John S Gruber,

Odpowiedzi:


2

Jeśli korzystasz z Unity lub menedżera sesji, który uruchamia demona kluczy-gnome, możesz po prostu użyć konika morskiego (hasła i klucze), aby ustalić klucz, zdefiniować, do czego służy, ustawić hasło i rozdzielić jego klucz publiczny do komputer, którego będziesz używać z ssh. Nie są wymagane żadne polecenia terminalowe.

Tworzysz hasło poprzez:

  1. wybierając Plik-> Nowy i wybierz Bezpieczny klucz powłoki. Naciśnij Kontynuuj.

  2. Wpisz opisową nazwę i wybierz Create and set up.

  3. Zostaniesz poproszony o dwukrotne wpisanie frazy (po raz drugi, aby sprawdzić, czy nie wprowadziłeś go nieprawidłowo za pierwszym razem.

  4. Wprowadź komputer, na którym ma zostać użyty klucz publiczny, i nazwę użytkownika na tym komputerze, dla którego będziesz używać klucza. Klucz publiczny zostanie skopiowany na inny komputer, w razie potrzeby monitując o podanie hasła na tym komputerze.

Teraz My Personal Keyskarta wyświetli klucz.

Zakładając, że gnome-keyring-daemon został poprawnie uruchomiony po zalogowaniu do Lightdm, a następnie przez menedżera sesji, kiedy po raz pierwszy użyjesz klucza z ssh, zostaniesz poproszony o podanie frazy. W tym oknie dialogowym możesz podać hasło, wybrać element Detailssterujący i poprosić o odblokowanie kluczy po każdym zalogowaniu - automatyczne podanie tego klucza. naciśnijOK

W ten sposób może nie zostać wyświetlony monit, jeśli dostępny jest inny klucz do zalogowania się na komputerze zdalnym.

Po wykonaniu tej czynności pierwsza zakładka Konik morski wyświetli Passwords„Odblokuj hasło” dla nazwy klucza. Kliknij trójkąt przed „ Hasłami: Zaloguj się”, aby go zobaczyć.


Więc ta funkcja nie działa z Awesome WM Chciałbym nadal używać Awesome, więc będę nadal korzystać z mojego obejścia.
pl1nk

19

Zabezpieczanie hasłem klucza SSH utrzymuje się podczas sesji i restartów

Prawdopodobnie właśnie tego chcesz: wprowadzenie hasła kluczowego powoduje, że będzie ono dostępne zawsze, gdy będziesz zalogowany. Będzie działać dla większości użytkowników korzystających z komputerów stacjonarnych Unity lub Gnome.

  • Kiedy połączysz się po dodaniu klucza publicznego do zdalnego serwera, pojawi się okno dialogowe dodawania ssh GUI:

    wprowadź opis zdjęcia tutaj

  • Rozwiń „Szczegóły”, klikając trójkąt, a otrzymasz poniższe. Domyślnie jest to „blokada kluczy po wylogowaniu”, która wymaga wprowadzenia hasła raz na sesję:

    wprowadź opis zdjęcia tutaj

  • Zmień go na Automatycznie odblokuj ... za każdym razem, gdy jestem zalogowany , co oznacza, że ​​będzie działać za każdym razem, gdy zalogujesz się do sesji - jest to „kontrolowane” przez twoje hasło użytkownika. Będzie się powtarzał po ponownym uruchomieniu.

    wprowadź opis zdjęcia tutaj

  • Wprowadź hasło klucza raz i to wszystko - klucz jest uwierzytelniany poprzez początkowe pomyślne logowanie do środowiska pulpitu.


Jeśli używasz AwesomeWM

Przetestowano ze świeżą instalacją AwesomeWM w nowym użytkowniku

  • Domyślnie AwesomeWM używa ssh-agent:

    eksport $ | grep SSH
    zadeklaruj -x SSH_AGENT_PID = „5479”
    deklaruje -x SSH_AUTH_SOCK = "/ tmp / ssh-fWCKNnPq5440 / agent.5440"
    
  • Aby powyższe kroki zadziałały, musisz użyć gnome-keyring-daemonjako demona uwierzytelniania SSH, a nie ssh-agent. Kiedy logujesz się przy użyciu lightdm, uruchamia się PAM gnome-keyring-daemon, który spróbuje odblokować klucz logowania za pomocą hasła odblokowującego, ale musisz dodać do konfiguracji, aby nadal działać i używać.

  • Dodaj następujące na końcu ~/.xprofile:

      #! / bin / bash
      eval $ (gnome-keyring-daemon --start)
      eksport SSH_AUTH_SOCK
      eksport GNOME_KEYRING_PID
      eksportuj GNOME_KEYRING_CONTROL
    

Polecenia w ~/.xprofilepliku zostaną wykonane przez xsession przed uruchomieniem wspaniałego menedżera okien i powiążą go z gnome-keyring-daemon --loginprocesem uruchomionym przez PAM za pomocą powyższych zmiennych środowiskowych.

  • Wyloguj się z powrotem do lightdm i zaloguj się ponownie, a teraz, gdy to zrobisz ssh user@host, powinieneś otrzymać powyższe wyskakujące okienka - użyj ich, aby zdekodować klucze prywatne w ~ / .ssh / i zapisać swoje klucze prywatne w kluczu logowania gnome-keyring.

Ogólne rozwiązanie dla dowolnego menedżera okien / środowiska pulpitu

  • należy użyć gnome-keyring-daemonzamiast ssh-agent. Do tego trzeba być uruchomiony gnome-keyring-daemon i ma ona zainicjowana i albo zrobić to po ssh-agenturuchomieniu, czy nie uruchomić ssh-agentw ogóle.

  • ssh(faktycznie ssh-add) decyduje, który agent uwierzytelniający ma zostać wywołany na podstawie wartości SSH_AUTH_SOCKzmiennej środowiskowej, którą można sprawdzić, wpisującexport | grep SOCK

  • jest to forma SSH_AUTH_SOCK=/tmp/ssh-MMFyVlI22130/agent.22130dla ssh-agent (NIE to, co chcesz móc zapisać swój klucz)

  • ale w formie SSH_AUTH_SOCK="/tmp/keyring-mEQB5g/ssh"dla gnome-keyring-daemon (który chcesz)

  • więc sprawdzić wartość i sprawdzić z ps aux | grep keyringtego gnome-brelok-demona jest uruchomiony, a jeśli tak, to go zainicjować z wynikamignome-keyring-daemon --start

  • możesz następnie sprawdzić powiązane zapisane tożsamości w konsoli, wpisując ssh-add -l- jeśli pokazuje „brak agenta”, to popełniłeś błąd podczas konfigurowania gnome-keyring-daemon.


Cóż, nie widziałem tego! Którego polecenia mogę użyć, a jeszcze lepiej, jakiego polecenia to okno dialogowe wywołuje?
pl1nk

@izx podczas korzystania z tego jest konieczne, aby użyć ssh-add?
John S Gruber,

@JohnSGruber Nie, dopóki są klucze prywatne ~/.ssh, nie ma potrzeby korzystania z nich ssh-add- okno dialogowe pojawi się przy pierwszym użyciu. Pamiętaj, że działa to tylko w Unity / Gnome - na czacie odkryłem, że OP używa AwesomeWM , gdzie to nie działa!
ish

1
@ pl1nk: proszę zobaczyć zaktualizowane rozwiązanie AwesomeWM pod koniec odpowiedzi.
ish

@izx - Dziękujemy za ogólne wsparcie sprawdź moje zaktualizowane pytanie.
pl1nk

2

Rozwiązaniem problemu jest użycie agenta ssh. Musisz tylko raz odblokować hasło swojego klucza, po czym jest ono przechowywane przez agenta w pamięci i używane automatycznie

  • Wygeneruj parę kluczy prywatny / publiczny z ssh-keygen -t dsa
  • Skopiuj klucz publiczny na maszynę zdalną, zwykle jest to ~ / .ssh / author_keys (użyj ssh-copy-iddo tego)
  • Uruchom ssh-addprzed zalogowaniem się do systemu zdalnego, poprosi o podanie hasła i zapisze je
  • Zaloguj się do systemu zdalnego, hasło nie jest konieczne

Agent ssh jest dobrze opisany w .net, na przykład tutaj:

Kolejną zaletą ssh-agent jest to, że jeśli zalogujesz się do zdalnego systemu ssh -A user@domain.name, możesz dalej ssh z komputera domain.name na trzeci komputer zawierający twój klucz publiczny bez konieczności kopiowania twojego klucza prywatnego na komputer domain.name (i to nigdy widzi twój klucz prywatny, tylko jednorazowe wyzwanie / odpowiedź).


Jak mogę to zrobić? Z wysłanych instrukcji nie wynika jasno. Co więcej, czy to Ubuntu jest powiązane?
pl1nk

Zredagowałem swój post ze szczegółową instrukcją
Floyd

Twoje rozwiązanie przechowuje hasło na sesję, dodatkowo w moim przypadku wydaje się, że był to konflikt z gnome-keyring, jak widać w mojej odpowiedzi.
pl1nk

@ pl1nk: więc potrzebujesz hasła do przechowywania między sesjami - tzn. pytany tylko raz dla każdego rozruchu?
ish

tak, musisz podać hasło raz na sesję. To jest cała idea kluczy SSH chronionych hasłem, aby zapewnić kolejną warstwę bezpieczeństwa poza możliwością dostępu do pliku klucza prywatnego po zalogowaniu.
Floyd

-1

możesz użyć

ssh-add 'filename or fullpath'

zostaniesz poproszony o hasło, jeśli je masz

wtedy możesz połączyć się bez hasła


1
Jak wspomniałem na moje pytanie, szukam bardziej eleganckiego sposobu.
pl1nk

-2

Jeśli chcesz pracować z kluczami prywatnymi:

ssh-keygen -t rsa -N ''

Następnie:

skopiuj .ssh/id_rsa.pubdo miejsca docelowego komputera .ssh/authorized_keysza pośrednictwem scp

scp .ssh/id_rsa.pub user@remote_machine:~/.ssh/authorized_keys

Wszystko gotowe.

Połącz się ze zdalnym komputerem bez hasła:

ssh user@remote_machine

I nie mamy pytania o hasło.


W ten sposób będę za każdym razem pytać o hasło klucza.
pl1nk

1
Prawdopodobnie dlatego, że uruchamiając ssh-keygen -t rsa -N '', podajesz hasło. Kiedy uruchomisz powyższe polecenie, nie wpisuj hasła, naciśnij tylko klawisz „ENTER”.
Octávio Filipe Gonçalves

Chciałbym mieć klucze z hasłem. Zaktualizowałem swoje pytanie
pl1nk

1
Ok, nie wiem, dlaczego chcesz to zrobić za pomocą hasła. Zwykle ta koncepcja jest używana tylko do nawiązywania połączeń ze zdalnymi komputerami, które mogą rozpoznać komputer klienta bez uwierzytelnienia. Jeśli więc nie chcesz tego scenariusza, wystarczy wykonać normalne połączenie ssh. dobrze?
Octávio Filipe Gonçalves

1
Nakłanianie ludzi do skopiowania klucza publicznego za pomocą kluczy autoryzowanych na zdalnej maszynie jest nieco brutalną siłą ... O wiele lepiej jest użyć polecenia ssh-copy-id user @ remotemachine, które po raz pierwszy zaloguje się przy użyciu hasła ZAŁĄCZ, nie zastępuj klucza.
Floyd
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.