Najłatwiejszy sposób na skopiowanie kluczy ssh na inną maszynę?

342

Jestem leniwy w domu i używam uwierzytelniania hasła do moich domowych urządzeń. Jestem gotowy do przejścia na uwierzytelnianie oparte na kluczach. W sieci istnieje wiele opcji, w tym catting, a następnie ssh na klucz, scpowanie klucza bezpośrednio itp.

Szukam najprostszego i zalecanego sposobu na skopiowanie klucza, mam nadzieję, że gdzieś w pakiecie ssh Ubuntu jest jakieś opakowanie na wygodę?

Wiem już, jak wyłączyć logowanie do haseł .

Jorge Castro
źródło

Odpowiedzi:

463

ssh-copy-idPolecenia (w OpenSSH-klient opakowaniu i instalowane domyślnie) robi dokładnie to:

ssh-copy-id [email protected]

kopiuje klucz publiczny twojej domyślnej tożsamości (użyj -i identity_filedla innych tożsamości) na zdalnym hoście.

Domyślną tożsamością jest Twój „standardowy” klucz ssh. Składa się z dwóch plików (klucz publiczny i prywatny) w swoim ~/.sshkatalogu, zwykle o nazwie identity, id_rsa, id_dsa, id_ecdsalub id_ed25519(i to samo z .pub), w zależności od rodzaju klucza. Jeśli nie utworzyłeś więcej niż jednego klucza ssh, nie musisz się martwić o określenie tożsamości, ssh-copy-id po prostu wybierze go automatycznie.

Jeśli nie masz tożsamości, możesz ją wygenerować za pomocą narzędzia ssh-keygen.

Ponadto, jeśli serwer używa portu innego niż domyślny ( 22), należy użyć znaków cudzysłowu w ten sposób ( źródło ):

ssh-copy-id "[email protected] -p <port-number>"
Marcel Stimberg
źródło
1
Jaka jest domyślna tożsamość?
Oxwivi
17
dla innego portu użyj tego:ssh-copy-id "user@host -p 6842"
jibon57
5
Co się stanie, jeśli zdalny serwer, na który kopiujesz, nie zezwala na podanie hasła i jest zasadniczo zablokowany, nie ma dostępu do SSH?
Cyle
10
Na komputerze Mac możesz to zrobić, brew install ssh-copy-ida następnie uruchomić polecenie.
Avishai
1
@MarcelStimberg proszę zaktualizować odpowiedź, aby uwzględnić profil -i; ludzie prawdopodobnie mają więcej niż 1 klawisz i naciskają je wszystkie, lub muszą szukać opcji -i w komentarzach
Nick
129

Podoba mi się odpowiedź Marcela. Nie znałem tego polecenia. Zawsze korzystałem z tego, co znalazłem na stronie Oracle :

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'

Pomyślałem, żeby opublikować go tutaj, ponieważ jest to dobra ilustracja tego, co można osiągnąć w kodzie powłoki za pomocą potęgi ssh. Ale korzystanie z tego ssh-copy-idjest zdecydowanie bezpieczniejszym sposobem, aby zrobić to poprawnie!

Pamiętaj, że jeśli folder jeszcze .sshnie istnieje, powyższe polecenie zakończy się niepowodzeniem. Ponadto przy tworzeniu pliku może być lepiej ustawić minimalne możliwe uprawnienia (w zasadzie tylko do odczytu i zapisu tylko dla właściciela). Oto bardziej zaawansowane polecenie:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'
Huygens
źródło
2
Te dokładne polecenia działają również z komputera Mac
Mihai P.
Powinien działać pod dowolnym Uniksem z największą liczbą powłok. Zaktualizowałem post za pomocą zaktualizowanego polecenia na wypadek, gdyby folder .sshnie istniał po stronie zdalnej.
Huygens
1
Nie catjest to konieczne - wystarczy zwykłe przekierowanie wejścia, np.< ~/.ssh/id_rsa.pub | ssh ...
maxschlepzig
@Huygens Thanks. Bardziej przydatne do zapamiętania tego, ponieważ nie trzeba niczego instalować, a może być również przydatne do wykonywania obcych poleceń, np. Zmiany uprawnień po stronie serwera, jak pokazano w zaawansowanym przykładzie.
Jonathan Komar
2
Zdecydowanie wolę ten sposób, ponieważ pozwala on używać pełnego ssh, co jest pomocne w ustaleniu, dlaczego rzeczy się psują. sshcopyid po prostu zamarł i nigdy nie działał, to poszło idealnie.
Syreny
31

Metoda graficzna

  1. Otwórz aplikacjeHasła i kluczeMoje klucze osobiste .
  2. Wybierz klucz, a następnie kliknij ZdalnySkonfiguruj klucz dla bezpiecznej powłoki .

Skonfiguruj komputer do połączenia SSH

ændrük
źródło
W moim menu nie ma „haseł i kluczy szyfrujących”.
Jorge Castro,
Jakiej wersji Ubuntu używasz? W Ubuntu 10.04 LTS powinno to być domyślnie dostępne.
ændrük
10.10, właśnie dodałem tag. Szukam odpowiedzi Marcela, chociaż +1 za odpowiedź na pulpit!
Jorge Castro,
4
Ten program jest seahorse.
Gilles
1
Myślę, że ta aplikacja jest w menu System-> Preferencje w 10.10 (nie mogę tego teraz sprawdzić, mam 10.04)
Huygens,
18

W systemie Ubuntu możesz pobrać klucze z Launchpad:

ssh-import-id [launchpad account name]

Szczegóły :

  1. Potrzebujesz konta Launchpad, więc zaloguj się lub utwórz konto
  2. Po zalogowaniu kliknij przycisk obok kluczy SSH:
  3. Wklej zawartość pliku klucza publicznego w tym polu (w tym komentarz). Taki klucz wygląda jak:

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
    

    Tutaj ssh-rsawskazuje, że klucz jest kluczem RSA, AAAAB3Nza .... UyDOFDqJpjest kluczem rzeczywistym i lekensteynjest komentarzem.

  4. Zapisz klucz, naciskając przycisk Importuj klucz publiczny
  5. Jeśli wszystko poszło dobrze, Twój klucz powinien być teraz wymieniony w obszarze Klucze SSH:

Pakiet ssh-import-idmusi być zainstalowany na komputerze, do którego dostęp można uzyskać ze zdalnego. Ten pakiet jest instalowany razem z openssh-serverpakietem, ponieważ jest zalecanym pakietem dla openssh-server. Po upewnieniu się, że ssh-import-idzostał zainstalowany na komputerze klienckim, uruchom:

ssh-import-id [launchpad account name]

Spowoduje to pobranie klucza publicznego z serwerów Launchpad przez HTTPS, który chroni cię przed atakami MITM.

Na Ubuntu Lucid i wcześniej można to zrobić za pomocą:

wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys

echoPotrzebne jest polecenie, aby uzyskać dodatkowe przełamane po wierszu z kluczem SSH.

Lekensteyn
źródło
14

dla niestandardowego portu

ssh-copy-id -i "[email protected] -p2222"

-i przełącza domyślnie na ~ / .ssh / id_rsa.pub, jeśli chcesz inny klucz, wstaw ścieżkę klucza po -i

OSTRZEŻENIE: Jeśli nie napisałeś -i, skopiuje wszystkie klucze znalezione w ~ / .ssh

Omar S.
źródło
1
Jesteś tego pewien OSTRZEŻENIE? „-i plik_identyfikacji - użyj tylko klucza (-ów) zawartych w pliku_tożsamości (zamiast szukać tożsamości za pomocą ssh-add (1) lub w domyślnym_pliku_ID). Jeśli nazwa pliku nie kończy się na .pub, jest to dodawane. Jeśli nazwa pliku jest pominięty, używany jest plik default_ID_file. "
Yousha Aleayoub
0

ssh-copy-idrobi dokładnie to. Nie jestem pewien, dlaczego niektóre inne odpowiedzi tutaj dodają niedokładne informacje. Pomoc pokazuje:

~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
    -f: force mode -- copy keys without trying to check if they are already installed
    -n: dry run    -- no keys are actually copied
    -h|-?: print this help

Właśnie wypróbowałem następujące na kliencie Ubuntu 18.04 z serwerem CentOS 7.6 i działało to jak urok. Przykład pokazuje użycie niestandardowego portu 2222i określenie klucza publicznego na~/.ssh/path-to-rsa.pub

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 [email protected]

Przed uruchomieniem polecenia faktycznie użyłem -nprzełącznika na końcu, aby wykonać próbę na sucho, która potwierdziła, że ​​polecenie będzie działać zgodnie z przeznaczeniem. Po potwierdzeniu ponownie uruchomiłem polecenie, jak wyżej, bez -nprzełącznika.

isapir
źródło