Jak dodać klucze SSH do pliku autoryzowanych_kluczy?

185

Mam serwer Ubuntu na Amazon EC2, którego używam do programowania, a dziś głupio wyczyściłem wszystko z mojego ~/.ssh/authorized_keyspliku. Na szczęście mam otwarte SSH, więc nadal jestem połączony i mogę naprawić plik, ale kiedy próbuję przywrócić plik klucza, nie działa. Nadal dostaję odmowę dostępu z serwera na moim komputerze lokalnym.

authorized_keysma uprawnienia 600. Próbowałem dołączyć mój klucz SSH do ssh-rsa i pozostawić wyłączony ssh-rsa. Próbowałem też ustawić klucz SSH jako jedną linię, ale to też nie zadziałało.

Czy jest coś jeszcze, co muszę zrobić, na przykład jak ponownie załadować plik?

Dave Long
źródło
3
Wiele lat później ta nadal wydaje się istotna i aktywna; chciałem tylko zrobić obserwację, porozmawiać o tym, że uniknąłem kuli: „Na szczęście mam otwarte SSH, więc wciąż jestem połączony [..]” - rany! ; dP
Nostromov
1
Ten post, który został zredagowany na moje urodziny, uratował mnie dwa miesiące temu na moje urodziny.
ytpillai

Odpowiedzi:

198

Nigdy nie należy zapisywać pliku z zawartością zaczynającą się -----BEGIN RSA PRIVATE KEY-----na serwerze, czyli na kluczu prywatnym . Zamiast tego musisz umieścić klucz publiczny w ~/.ssh/authorized_keyspliku.

Ten klucz publiczny ma .pubrozszerzenie podczas generowania za pomocą, ssh-keygena jego treść zaczyna się od ssh-rsa AAAAB3. (Format binarny jest opisany w odpowiedziach na to pytanie ).

Uprawnienia ~/.sshna serwerze powinny wynosić 700. Plik ~/.ssh/authorized_keys(na serwerze) powinien mieć tryb 600. Uprawnienia klucza (prywatnego) po stronie klienta powinny wynosić 600.

Jeśli klucz prywatny nie był chroniony hasłem i umieszczasz go na serwerze, zalecamy wygenerowanie nowego:

ssh-keygen -t rsa

Możesz to pominąć, jeśli masz całkowitą pewność, że nikt nie odzyska skasowanego klucza prywatnego z serwera.

Jeśli to nie pomoże, uruchom sshopcje większej szczegółowości:

ssh -vvv [email protected]

Po stronie serwera możesz przejrzeć /var/log/auth.logszczegółowe informacje.

Lekensteyn
źródło
1
Dzięki serwerom Amazon EC2 dostaję tylko klucz prywatny (key.pem). Nigdzie nie mam klucza publicznego.
Dave Long
3
@Dave Long: Musisz wygenerować nowy klucz za pomocą ssh-keygen -t rsai umieścić nowo utworzony id_rsa.pubplik ~/.ssh/authorized_keysna serwerze. Zobacz także docs.amazonwebservices.com/AWSEC2/latest/UserGuide/…
Lekensteyn
15
@DaveLong: Możesz wygenerować klucz publiczny z klucza prywatnego w dowolnym momencie. Możesz to zrobić po prostu za pomocą następującego polecenia: ssh-keygen -y -f key.pem > key.pub
Morgan Blackthorne
5
@MorganBlackthorne Chociaż jest to prawda, zaleciłbym wygenerowanie kluczy prywatnych zamiast akceptowania jednego ze zdalnych źródeł. Nie możesz być całkowicie pewien, że klucz prywatny nie wyciekł.
Lekensteyn
2
@Gerrat Fixed².
Lekensteyn
175

Alternatywny sposób instalacji klucza publicznego na komputerze zdalnym authorized_keys:

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Niektóre zalety:

  • nie wymaga ssh-copy-idinstalacji.

  • gwarancje, które mkdirdziałają przed próbą dołączenia id_rsa.pubdo authorized_keys.

Marius Butuc
źródło
10
Twoja odpowiedź pomogła mi to zrobić na wielu zdalnych komputerach bez żadnych dodatkowych pakietów, dziękuję.
nol
Nie gwarantuje to, że katalog „~ / .ssh” i plik „~ / .ssh / author_keys” zostaną utworzone z odpowiednimi uprawnieniami.
Nick
1
@Nick, miałem ten problem. Więc może naprawdę trzeba najpierw sprawdzić ich istnienie, jeśli brakuje, utwórz poprawnie przy pomocy chmod (700 / folder, 600 / plik), a dopiero potem dodaj? więc może to nie może być jeden liniowiec?
AnneTheAgile,
7
@AnneTheAgile Myślę, że zmiana mkdir -p ~/.sshczęści odpowiedzi udzielonej przez @MariusButuc umask 077 && mkdir -p ~/.sshto wszystko, co musisz zrobić, aby upewnić się, że będzie działać poprawnie.
Nick
1
ty @Nick! Spróbuję.
AnneTheAgile,
128

Jeśli masz uwierzytelnianie oparte na logowaniu, użyj, ssh-copy-idaby dołączyć klucze publiczne do zdalnego serwera.

ssh-copy-id user@host
Shoaib Nawaz
źródło
1
To nie wydaje się być prawidłowym poleceniem na Macu, jakim jest mój komputer kliencki.
Dave Long
13
na OSX można zainstalować za pomocą brew:brew install ssh-copy-id
phil
W Macports to polecenie można zainstalować za pomocą sudo port install openssh +ssh_copy_id. +ssh_copy_idInstaluje OpenSSH z wariantem ssh_copy_id.
Stefan Lasiewski
6
Pamiętaj, że instrukcje na stronie phildawson.tumblr.com wymagają zainstalowania niezaufanego oprogramowania jako root. Jest to dość niebezpieczny i dobry sposób na włamanie, chyba że wiesz, że możesz zaufać autorowi.
Stefan Lasiewski
38
local> scp .ssh/id_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit
jjg
źródło
16

Najłatwiejszym sposobem jest skopiowanie i wklejenie ...

Najpierw wyświetl / skopiuj zawartość lokalnego klucza publicznego, w id_rsa.pubtym początkową „ssh-rsa”, aż zakończy się na Twój adres e-mail:

cat ~/.ssh/id_rsa.pub

Następnie edytuj authorized_keysna serwerze i wklej zawartość schowka poniżej innych kluczy w tym pliku:

nano ~/.ssh/authorized_keys

I zapisz Ctl+O, zamknij plik Ctl+X, wyjdź z sesji SSH exiti spróbuj zalogować się ponownie, aby potwierdzić, że zadziałało. Jeśli nie poprosił o hasło, działało.

ow3n
źródło
5

Pomyślałem, że mogę się do tego przyczynić, ponieważ chodzi konkretnie o instancje AWS, a wszystkie odpowiedzi traktują problem tylko jako problem z Linuksem, tak jakby był to sprzęt. Pierwszą rzeczą, którą musisz zrozumieć, jest to, że nigdy nie powinieneś nigdy nie traktować instancji EC2 jako sprzętu. To po prostu stworzy dla ciebie więcej pracy. Traktuj je jako niestabilne. To największa przeszkoda, jaką widzę w AWS. Zrób AMI dla swojej instancji i wstrzyknij potrzebny klucz do nowej instancji. cloud-init zaopiekuje się tobą. Bardziej szczegółowo wszystko, co musisz zrobić, to użyć poprawnego klucza publicznego podczas tworzenia nowej instancji z AMI oryginału. Jeśli, podobnie jak w komentarzach do zatwierdzonej odpowiedzi, chcesz wygenerować własną parę kluczy plików pub i pem, AWS oferuje opcję przesłania kluczy publicznych do użytku w EC2.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws

einarc
źródło
3

Po zapisaniu klucza publicznego należy zapisać klucz prywatny w katalogu i pliku na komputerze. A w sekcji uwierzytelniania ssh on putty powinieneś wskazać plik klucza prywatnego, który zapisałeś na pulpicie. To będzie działać. Mi to pasuje.

użytkownik273266
źródło
1
Bardzo bym chciała, gdyby konsola Windows mogła mieć całą funkcjonalność ssh dodaną do interpretera
Dennis
2

Pobierz powłokę na zdalnym komputerze, na którym chcesz umieścić klucz, a następnie możesz uruchomić ten jeden wiersz, aby utworzyć niezbędne pliki i katalogi, ustawić ich uprawnienia i dołączyć klucz do pliku. Oczywiście musisz zmienić KEYGOESHEREczęść poniżej i komentarz po niej.

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys
Sarel Botha
źródło
1

Oto wariant, w którym możesz mieć listę nazw plików kluczy publicznych w pliku tekstowym, a duża partia plików kluczy publicznych znajduje się również w tym samym katalogu.

Ta odmiana może być pomocna, jeśli podajesz ogromną listę plików kluczy publicznych do zaimportowania :-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
Jlmontes
źródło