ssh-copy-id nie działa

19

Usiłuję skonfigurować logowanie SSH bez hasła na CentOS 5.4:

  1. Wygenerowałem klucz publiczny RSA na kliencie.
  2. ssh-copy-id od klienta do serwera.
  3. Zweryfikowane ~ / .ssh / Author_keys zawiera klucz klienta.

Klient nadal monitował o hasło. Co mnie ominęło?

Dzięki.

EDYCJA: sprawdzono ssh_config i uprawnienia zgodnie z zaleceniami. To są informacje debugowania od klienta:

debug2: key: /home/saguna/.ssh/identity ((nil))
debug2: key: /home/saguna/.ssh/id_rsa (0x2b31921be9a0)
debug2: key: /home/saguna/.ssh/id_dsa ((nil))
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-with-mic,password
debug3: preferred gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup gssapi-with-mic
debug3: remaining preferred: publickey,keyboard-interactive,password
debug3: authmethod_is_enabled gssapi-with-mic
debug1: Next authentication method: gssapi-with-mic
debug3: Trying to reverse map address 192.168.1.75.
debug1: Unspecified GSS failure.  Minor code may provide more information
Unknown code krb5 195

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

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

debug2: we did not send a packet, disable method
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/saguna/.ssh/identity
debug3: no such identity: /home/saguna/.ssh/identity
debug1: Offering public key: /home/saguna/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: Trying private key: /home/saguna/.ssh/id_dsa
debug3: no such identity: /home/saguna/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
[email protected]'s password: 
jackhab
źródło
Też to rozumiem :(
Matt Joiner

Odpowiedzi:

19

9/10 razy dzieje się tak, ponieważ ~ / .ssh / Author_Key nie działa we właściwym trybie.

chmod 600 ~/.ssh/authorized_keys
JustinShoffstall
źródło
2
Do twojej wiadomości, stworzyłem mały skrypt na github.com/centic9/generate-and-send-ssh-key, który uruchamia niezbędne kroki za jednym razem i dodatkowo zapewnia wszystkie uprawnienia do plików / katalogów, które zawsze powodowały bóle głowy ...
centic
5
Jeśli to nie zadziała, powinieneś również spojrzeć na odpowiedź @ Gilles. W szczególności dom i~/.ssh katalogi nie mogą być zapisywane przez nikogo innego niż użytkownik.
ostrokach
Wiem, że to stare, ale dzięki milionowi @centic. Byłem pewien, że moje uprawnienia są prawidłowe, ale nigdy nie zadałem sobie trudu, aby sprawdzić katalogi $ HOME i .ssh /.
jdferreira
Pracował dla mnie. Dzięki!
Ivan Kovtun,
12

Sprawdź w / etc / ssh / sshd_config, aby umożliwić uwierzytelnianie za pomocą klucza. Powinieneś mieć coś takiego i upewnij się, że wiersze nie są komentowane:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

PS: nie zapomnij zrestartować sshd po zmodyfikowaniu pliku (/etc/init.d/sshd restart)

Patkos Csaba
źródło
Oprócz odpowiedzi Patkos Csaba sprawdź uprawnienia lokalnego i zdalnego folderu ~ / .ssh.
W moim przypadku AuthorizedKeysFilezostał skomentowany i musiałem również użyć bezwzględnej ścieżki do authorized_keys.
Andrew
Pojawia się komunikat „Nie można otworzyć połączenia z agentem uwierzytelniającym”. podczas próby ssh-add
Manticore,
to powinna być wybrana odpowiedź
Francisco Tapia,
Może nie rozumiesz komentarzy. Skomentowane linie pokazują wartości domyślne. Nie musisz ich odkomentować, jeśli chcesz domyślną wartość. Musisz anulować komentarz do właściwości tylko, jeśli chcesz zastąpić wartość domyślną.
clearlight
5

Odkryłem, że w moim systemie problemem był katalog użytkownika (/ home / nazwa użytkownika) wyposażony w niewłaściwe ustawienia uprawnień. Tak było drwxr-x-w-i trzeba było drwxr-xr-x(tylko z uprawnieniami do zapisu dla właściciela). Rozwiązaniem było użycie chmod:

sudo chmod 0755 /home/username
Charlie
źródło
1
Tak! Pracował dla mnie. ssh dało mi monit o hasło, ponieważ spartaczyłem persmisje.
clearlight
4

Nie jestem tutaj ekspertem, ale też natknąłem się na taki problem, oto moje dwa centy oprócz wszystkich innych sugestii.

Czasami ssh-copy-idkopiuje niewłaściwy klucz na zdalny serwer (może się zdarzyć, jeśli masz kilka kluczy i / lub używasz niestandardowych nazw plików kluczy) lub agent uwierzytelniania jest źle skonfigurowany.

Oto cytat ze stron podręcznika :

Jeśli podano opcję -i, wówczas używany jest plik tożsamości (domyślnie ~ / .ssh / id_rsa.pub), niezależnie od tego, czy w ssh-agent są jakieś klucze. W przeciwnym razie, jeśli to: ssh-add -L dostarcza jakieś dane wyjściowe, wykorzystuje je zamiast pliku tożsamości.

Więc w zasadzie chcesz to sprawdzić:

  • Agent uwierzytelniania systemu (zwykle ssh-agent) widzi klucze, których zamierzasz użyć (sprawdź ssh-add -Ldane wyjściowe)
    • Jeśli nie widzisz pożądanego klucza, dodaj go za pomocą ssh-add
  • ssh-copy-idSkopiowane z tego samego klucza do zdalnego komputera (wystarczy zalogować się do zdalnego serwera za pomocą hasła i sprawdzić zawartość ~/.ssh/authorized_keys)
    • Jeśli nie widzisz żądanego klucza na zdalnym serwerze, możesz domyślnie powiedzieć, ssh-copy-idktóry klucz skopiować:ssh-copy-id -i ~/.ssh/some_public_key

Mam nadzieję, że to pomaga.

Dmitrij Paszkiewicz
źródło
1
Udało wam się! Kopanie przez mojego ssh-copy-id problemu jest: DEFAULT_PUB_ID_FILE=$(ls -t ${HOME}/.ssh/id*.pub 2>/dev/null | grep -v -- '-cert.pub$' | head -n 1), który będzie domyślnie do alfabetycznej pierwszego klucza - w moim przypadku mieliśmy id_boot2docker.pub(co jest podobno domyślna nazwa boot2docker ssh rzeczy). Wygląda na to, że istnieje wiele różnych implementacji ssh-copy-id; moje pochodzi z brew install ssh-copy-id, które z kolei pochodzi z openssh-portable. Moja strona podręcznika wyraźnie wspomina o tym zachowaniu ...
Christian Ulbrich
3

Najczęstszym problemem są nieprawidłowe uprawnienia po stronie serwera. Sprawdź, czy żaden z katalogu domowym, ~/.ssha ~/.ssh/authorized_keysto zapisywalny przez nikogo, ale (w szczególności nie mogą być grupa zapisu).

Jeśli to nie jest problem, uruchom ssh -vvv serveri spójrz na widok rozmowy klienta. W szczególności sprawdź, czy klient próbuje klucza z serwerem.

Gilles „SO- przestań być zły”
źródło
Dziękuję Ci!!! Nie rozumiem dlaczego, ale Twój katalog domowy , ~/.sshi ~/.ssh/authorized_keysnie może być zapisywany przez nikogo oprócz ciebie.
ostrokach
2

Oprócz wszystkich powyższych, zawsze można sprawdzić plik dziennika sshd:

/var/log/auth.log
Omer Dagan
źródło
1

Próbowałem innych poprawek, ale okazało się, że musiałem zmienić katalog domowy, aby inni nie mogli zapisywać. Katalog domowy to 777. Zmieniłem go na 755 i działało.

dulcana
źródło
1
witaj @dulcana, próbuje ustawić bezszeregowy login ssh, w jaki sposób zmiana uprawnień na 755 może pomóc rozwiązać problem?
Francisco Tapia,
@FranciscoTapia to dlatego, że sshd zapewnia, że ​​inni użytkownicy nie mogli złośliwie utworzyć pliku autoryzowanego_klucza, odmawiając logowania za pomocą klucza ssh, w którym grupa lub inna osoba może zapisać plik lub któregoś z rodziców. Inne odpowiedzi również o tym wspominały.
Ángel
0

w moim przypadku / etc / ssh / sshd_config zawierał następujący parametr:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys2

Ale ssh-copy-id utworzył plik o nazwie nazwa_autoryzowanych kluczy, więc musiałem zmodyfikować wpis do nowej nazwy. Więcej informacji na temat wycofanych kluczy autoryzowanych2

Laplasz
źródło
0

Jako uzupełnienie odpowiedzi Omera Dagana na nowszy CentOS 7 użyj:

journalctl -f -u sshd

do przeglądania dzienników sshd na serwerze.

david.perez
źródło
-1

Problem polegał na tym, że wyłączono uwierzytelnianie RSA w / etc / ssh / ssh_config

jackhab
źródło