Z dnia na dzień serwer naszej firmy zaczął prosić mnie o hasło SSH.
Pierwszą rzeczą, którą sprawdziłem, było sprawdzenie, czy mój klucz znajduje się w .ssh/authorized_keys
na serwerze. Mój klucz był w środku, nic się nie zmieniło. Również w /etc/ssh/sshd_config
nic się nie zmieniło.
Następnie próbowałem wykonać tę procedurę na świeżo zainstalowany serwer Ubuntu16. Po wykonaniu tych 5 kroków nowy serwer ponownie poprosił mnie o hasło SSH.
Polecenie ssh-copy-id
w końcu wykonało logowanie bezkluczykowe SSH, ale zauważyłem, że .ssh/authorized_keys
ma trzy wiersze: jedną zaczynającą się od ssh-dss
i 2x zaczynającą się od ssh-rsa
Teraz pamiętam, że 5-etapowa procedura z powyższego linku działała w przeszłości tylko z jednym kluczem.
Czy ostatnio coś się zmieniło? Dlaczego powyższa procedura już nie działa?
Edycja: ponieważ ssh-copy-id
kopiuje łącznie 3 klucze do .ssh/authorized_keys
tych kluczy można znaleźć w następujących plikach:
~/.ssh/id_dsa
~/.ssh/sshkey.pub
~/.ssh/id_rsa.pub
więc usunąłem wiersz po wierszu ze zdalnego pliku „s .ssh/authorized_keys
usunięto wiersz ~/.ssh/id_dsa
– automatyczne logowanie powiodło się
usunięto wiersz ~/.ssh/id_rsa.pub
– automatyczne logowanie powiodło się
usunięto ~/.ssh/sshkey.pub
wiersz – automatyczne logowanie nie powiodło się – zapytano o hasło
Potrzebna jest tylko treść z ~/.ssh/sshkey.pub
. Dlaczego SSH porównuje sshkey.pub
, a nie id_rsa.pub
jak w przykładzie z samouczka online?
Komentarze
Odpowiedź
Wygląda na to, że ssh-copy-id
to tylko wygodna funkcja. Sprawdza, czy klucze zostały już wyeksportowane do komputera, w razie potrzeby tworzy katalog .ssh
, ale po prostu dodaje klucze publiczne do .ssh/authorized_keys
. ssh-copy-id
to skrypt powłoki (w openssh), więc możesz na końcu odczytać jego kod (vi `which ssh-copy-id`
):
[ "$DRY_RUN" ] || printf "%s\n" "$NEW_IDS" | \ ssh "$@" "exec sh -c "cd ; umask 077 ; mkdir -p .ssh && { [ -z ""`tail -1c .ssh/authorized_keys 2>/dev/null`"" ] || echo >> .ssh/authorized_keys ; } && cat >> .ssh/authorized_keys || exit 1 ; if type restorecon >/dev/null 2>&1 ; then restorecon -F .ssh .ssh/authorized_keys ; fi"" \ || exit 1
Podczas uwierzytelniania sprawdzane są tylko authorized_keys
. Z dokumentacji openssh :
Plik ~ / .ssh / allowed_keys zawiera listę publiczną klucze, które są dozwolone do logowania. Gdy użytkownik się loguje, program ssh informuje serwer, której pary kluczy chciałby użyć do uwierzytelnienia. Klient udowadnia, że ma dostęp do klucza prywatnego, a serwer sprawdza, czy odpowiedni klucz publiczny jest upoważniony do akceptacji konta.
Mam nadzieję, że odpowiedź tytuł twojego pytania „ssh-copy-id a ręczne kopiowanie id_rsa.pub”. Ten plik ~/.ssh/sshkey.pub
Nie mam, więc mam nadzieję, że samodzielnie rozwiązałeś problemy z konfiguracją. W każdym razie tak, możesz po prostu ręcznie skopiować klucz publiczny do authorized_keys
nie używa ssh-copy-id
.
ssh -v your-remote-server
do swojego pytania.