Dodanie klucza publicznego do ~ / .ssh / author_keys nie loguje mnie automatycznie

446

Dodałem publiczny klucz SSH do pliku autoryzowanych_kluczy . ssh localhostpowinien mnie zalogować bez pytania o hasło.

Zrobiłem to i próbowałem pisać ssh localhost, ale wciąż prosi mnie o wpisanie hasła. Czy muszę wprowadzić inne ustawienie, aby działało?

Postępowałem zgodnie z instrukcjami dotyczącymi zmiany uprawnień:

Poniżej jest wynik, jeśli to zrobię ssh -v localhost.

debug1: Reading configuration data /home/john/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/john/.ssh/identity type 1
debug1: identity file /home/john/.ssh/id_rsa type -1
debug1: identity file /home/john/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.7p1 Debian-8ubuntu3
debug1: match: OpenSSH_4.7p1 Debian-8ubuntu3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'localhost' is known and matches the RSA host key.
debug1: Found key in /home/john/.ssh/known_hosts:12
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/john/.ssh/identity
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>

Następnie prosi o podanie hasła po powyższym logu. Dlaczego nie loguje mnie bez hasła?

użytkownik482594
źródło
5
Chociaż nie jest tak w tym przypadku, jeśli pochodzisz z Google i używasz zaszyfrowanego katalogu domowego, sshd nie będzie mógł uzyskać do niego dostępu, a zatem nie będzie w stanie odczytać pliku autoryzowanych_kluczy. Oto rozwiązanie: bugs.launchpad.net/ubuntu/+source/openssh/+bug/362427/comments/…
Daniel Schaffer

Odpowiedzi:

1097

Musisz zweryfikować uprawnienia do authorized_keyspliku i folderu / folderów nadrzędnych, w których się on znajduje.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Aby uzyskać więcej informacji, zobacz tę stronę .

Może być również konieczna zmiana / weryfikacja uprawnień do katalogu domowego, aby usunąć dostęp do zapisu dla grupy i innych osób.

chmod go-w ~
Miś
źródło
6
Cóż, coś w powyższym przypadku działało, ale czy „chmod -R go-wrx foobar” nie jest raczej dramatyczny? Dlaczego potrzeba rekurencji?
joachim
9
W drugiej części nie jest konieczne, aby rekursywny, wystarczy samo wykonanie chmod go-wrx foobar. Robienie tego rekurencyjnie może poważnie uszkodzić niektóre aplikacje, jeśli masz jakiś dostęp do plików lub grupy, szczególnie jeśli jest to katalog internetowy.
StingeyB
24
Jak wspomniano w często zadawanych pytaniach dotyczących OpenSSH, katalog domowy i .ssh użytkownika musi jedynie zapisać uprawnienia do usunięcia dla grupy / innej ( chmod go-w $HOME $HOME/.sshto załatwi sprawę). Zatem uprawnienia mogą być tak „otwarte” jak 755 dla obu katalogów, jeśli masz na to ochotę. Najprostsze / najmniej inwazyjne polecenia znajdują się w FAQ: openssh.org/faq.html#3.14
davidjb
3
Dlaczego nie działałoby to dla mnie, dopóki nie działałem chmod 700 ~/.ssh && chmod 644 ~/.ssh/authorized_keys? 600 nie działało tam, gdzie działało 644 ...
ficuscr
3
Potrzebowałem również, sudo chown -R {$USER}:{$USER} ~/.ssh/ponieważ zapisałem authorized_keysplik jako root.
Zane Hooper
155

SELinux może również powodować, że klucze autoryzowane nie będą działać. Zwłaszcza dla root'a w CentOS 6 i 7. Nie trzeba go jednak wyłączać. Po zweryfikowaniu swoich uprawnień możesz to naprawić w następujący sposób:

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
restorecon -R -v /root/.ssh
Cole Stanfield
źródło
7
Właśnie restorecontego potrzebujesz po ręcznym skopiowaniu plików, np. Na nowy dysk twardy. (W tym przypadku prawdopodobnie powinieneś uruchomić go na wszystkich plikach. Mógłby rozwiązać inne dziwne problemy.)
ospalh 24.09.2015
Kolejny szczęśliwy kamper tutaj. To był mój problem w RHEL 6.5
Antonio Ortells,
2
9/10 razy problem „dlaczego to nie działa, zawsze działa” to problem selinux.
Andrew White,
naprawiono problem dla mnie na serwerze 1 i 1 (1und1)
muzyk
104

ustawienie kluczy autoryzowanych ssh wydaje się proste, ale ukrywa pułapki, które próbuję wymyślić

-- SERWER --

w / etc / ssh / sshd_config ustawiono, passwordAuthentication yesaby serwer mógł tymczasowo akceptować uwierzytelnianie hasłem

-- KLIENT --

rozważ cygwin jako emulację Linuksa i zainstaluj i uruchom openssh

1. generuj klucze prywatne i publiczne (po stronie klienta) # ssh-keygen

tutaj naciskając tylko ENTER otrzymujesz DOMYŚLNE 2 pliki „ id_rsa ” i „ id_rsa.pub ” w ~ / .ssh /, ale jeśli podasz nazwę dla klucza, wygenerowane pliki zostaną zapisane w twoim pwd

2. umieść plik your_key.pub na komputerze docelowymssh-copy-id user_name@host_name

jeśli nie utworzyłeś domyślnego klucza, jest to pierwszy krok do popełnienia błędu ... powinieneś użyć

ssh-copy-id -i path/to/key_name.pub user_name@host_name

3. Rejestrowanie ssh user_name@host_namebędzie działać tylko dla domyślnej id_rsa więc tutaj jest 2. pułapką dla trzebassh -i path/to/key_name user@host

(użyj opcji ssh -v ... , aby zobaczyć, co się dzieje)

Jeśli serwer nadal prosi o hasło, to dałeś coś wprowadzić hasło: po utworzeniu kluczy (więc jest to normalne)

jeśli ssh nie nasłuchuje, należy użyć portu 22 ssh -p port_nr

-- SERWER -----

4. zmodyfikuj / etc / ssh / sshd_config, aby mieć

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  %h/.ssh/authorized_keys

(niewygodne, jeśli sprawa)

To każe ssh zaakceptować klucze autoryzowane i poszukać w katalogu osobistym użytkownika żądła klucza nazwa zapisanego w pliku .ssh / autoryzowane klucze

5 ustaw uprawnienia na maszynie docelowej

chmod 755 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Wyłącz także uwierzytelnianie przy użyciu hasła

passwordAuthentication no

aby zamknąć bramę dla wszystkich prób ssh root / admin /....@ twoja_domena

6 upewnij się, że własność i własność grupy wszystkich katalogów domowych innych niż root są odpowiednie.

chown -R ~ usernamehere
chgrp -R ~/.ssh/ user 

===============================================

7. rozważ doskonałą stronę http://www.fail2ban.org

8. dodatkowy tunel ssh, aby uzyskać dostęp do serwera MySQL (bind = 127.0.0.1)

bortunac
źródło
5
Pamiętaj, że „tylko 4 zabezpieczenia” to nie tylko bezpieczeństwo! SSH zignoruje plik, jeśli nie będzie miał ograniczających uprawnień.
Navin
Zapewnienie własności byłoby doskonałym dodatkiem do tej listy
steviejay
1
Nie miałem pojęcia o tym ssh-copy-id! Sam ten krok byłby świetną odpowiedzią.
James Marble
1
chmod 755 ~ / .ssh zamiast 700, które widzę gdzie indziej zdawało się to robić
Jim W mówi przywrócenie Moniki
36

Upewnij się także, że Twój katalog domowy nie jest zapisywany przez innych

chmod g-w,o-w /home/USERNAME

Odpowiedź została skradziona stąd

Stephan Hoyer
źródło
4
Doing chmod 700 ~/.ssh ; chmod 600 ~/.ssh/authorized_keys ; chmod g-w,o-w ~działało dla mnie. Dzięki.
gbraad
1
dlaczego nie użyć chmod og-w /home/USERNAMEzamiast tego?
Paramvir Singh Karwal
13

zdesperowani mogą również upewnić się, że nie mają dodatkowych znaków nowej linii w pliku autoryzowanych kluczy, ze względu na kopiowanie tekstu id_rsa.pub z pomylonego terminala.

Alexander Taylor
źródło
2
Właśnie to mi się przydarzyło! dwa terminale mają tę samą szerokość, więc trudno je rozgryźć, dopóki nie włączyłem numerów linii, aby zobaczyć dwie linie w pliku autoryzowanych_kluczy.
Shawn
1
To. Właśnie z tego powodu zmarnowałem godzinę. I to nie pierwszy raz. Odpowiedź @ bortunac wspomina o narzędziu ssh-copy-id, którego będę używać w przyszłości, aby tego uniknąć.
xdhmoore,
Dostałem treść id_rsa.pubużywania morezamiast cat, co było fatalne z powodu niewidzialnych przełamań linii.
Dan Halbert
8

użytkownik to twoja nazwa użytkownika

mkdir -p /home/user/.ssh
ssh-keygen -t rsa
touch /home/user/.ssh/authorized_keys
touch /home/user/.ssh/known_hosts
chown -R user:user /home/user/.ssh
chmod 700 /home/user/.ssh
chmod 600 /home/user/.ssh/id*
chmod 644 /home/user/.ssh/id*.pub
chmod 644 /home/user/.ssh/authorized_keys
chmod 644 /home/user/.ssh/known_hosts
wcc526
źródło
Lepiej dla roota:mkdir -p /home/$USER/.ssh && chown -R $USER:$USER /home/$USER/.ssh && sudo -u $USER ssh-keygen -t rsa && touch /home/$USER/.ssh/authorized_keys && touch /home/$USER/.ssh/known_hosts && chmod 700 /home/$USER/.ssh && chmod 600 /home/$USER/.ssh/id* && chmod 644 /home/$USER/.ssh/id*.pub && chmod 644 /home/$USER/.ssh/authorized_keys && chmod 644 /home/$USER/.ssh/known_hosts && vim /home/$USER/.ssh/authorized_keys # paste keys here!
Odyseusz
7

Uważaj, że SELinux może również wywołać ten błąd, nawet jeśli wszystkie uprawnienia wydają się być w porządku. Wyłączenie to załatwiło sprawę (wstaw zwykłe zastrzeżenia dotyczące wyłączania).

Nim
źródło
Możesz zobaczyć, jak SELinux wtrąca się /var/log/audit/audit.log. restorecon -R -v /root/.sshnaprawiono mój konkretny przypadek.
Dave Goodell,
7

Umieszczenie klucza publicznego w .ssh / uprawnionych_kluczy jest konieczne, ale niewystarczające, aby sshd (serwer) mógł go zaakceptować. Jeśli twój klucz prywatny jest chroniony hasłem, musisz za każdym razem podawać hasło ssh (klientowi). Możesz też użyć ssh-agent lub odpowiednika GNOME.

Twój zaktualizowany przebieg jest zgodny z kluczem prywatnym hasło chronione. Zobacz ssh-agent lub użyj ssh-keygen -p.

fche
źródło
5

Napisz polecenie:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Po wykonaniu tej czynności upewnij się, że twój katalog jest taki:

drwx------ 2 lab lab 4.0K Mar 13 08:33 .
drwx------ 8 lab lab 4.0K Mar 13 08:07 ..
-rw------- 1 lab lab  436 Mar 13 08:33 authorized_keys
-rw------- 1 lab lab 1.7K Mar 13 07:35 id_rsa
-rw-r--r-- 1 lab lab  413 Mar 13 07:35 id_rsa.pub
Exsonic
źródło
1
jak twoja odpowiedź różni się od zaakceptowanej? Napisałeś to 3 lata później za pomocą polecenia Ctrl + C Ctrl-V?
żądło
5

W końcu udało mi się upewnić, że właściciel / grupa nie jest rootem, ale użytkownikiem:

chown -R ~/.ssh/ user
chgrp -R ~/.ssh/ user 
Ulliroyal
źródło
chown: nieprawidłowy użytkownik: '/home/lsa/.ssh/'
Stepan Yakovenko
3

Spróbuj „ssh-add”, który działał dla mnie.

h99
źródło
3

Kolejna wskazówka do zapamiętania. Od wersji 7.0 OpenSSH domyślnie wyłącza klucze ssh DSS / DSA ze względu na ich słabość dziedziczenia. Więc jeśli masz OpenSSH v7.0 +, upewnij się, że twój klucz nie jest ssh-dss.

Jeśli utkniesz z kluczami DSA, możesz ponownie włączyć obsługę lokalnie, aktualizując pliki sshd_configi ~/.ssh/configza pomocą takich linii:PubkeyAcceptedKeyTypes=+ssh-dss

użytkownik2683246
źródło
3

W moim przypadku musiałem umieścić mój authorized_keysplik .openssh.

Ta lokalizacja jest określona w /etc/ssh/sshd_configopcji AuthorizedKeysFile %h/.ssh/authorized_keys.

Sean Bannister
źródło
Istnieje cała klasa problemów, które mogą wystąpić na serwerze (podczas próby połączenia się z klientem), których nie można debugować bez dostępu do serwera ... Ma to na celu ukrycie informacji przed złośliwymi klientami, ale utrudnia odpluskwić.
qneill,
2

Upewnij się, że użytkownik docelowy ma ustawione hasło. Uruchom, passwd usernameaby ustawić jeden. Było to dla mnie wymagane, nawet jeśli hasło SSH było wyłączone.

Jerzy
źródło
2

to rozwiązuje mój problem

ssh-agent bash

ssh-add

juliański
źródło
Proszę wyjaśnić, co to robi.
lyuboslav kanev
Agent ssh przechowuje twoje klucze ssh. Polecenie bash uruchamia nową instancję swojej powłoki. a ssh-add odblokowuje klucze i ładuje je
Julian
2

Kolejna kwestia, którą musisz się zająć. Jeśli wygenerowany plik nie jest domyślny id_rsa i id_rsa.pub

Musisz utworzyć plik .ssh / config i ręcznie określić, który plik id będzie używany z połączeniem.

Przykład jest tutaj:

host remote_host_name
hostname 172.xx.xx.xx
user my_user
IdentityFile /home/my_user/.ssh/my_user_custom.pub
Kunthar
źródło
2
IdentityFile powinien być kluczem prywatnym
Ken H
@KenH tak, jasne. literówka to. Przepraszam za to.
Kunthar
1

I wydał sudo chmod 700 ~/.sshi chmod 600 ~/.ssh/authorized_keysi chmod go-w $HOME $HOME/.sshod góry i to naprawić mój problem na polu CentOS7 że miałem pomieszane uprawnienia na starając się dostać samba akcja działa. Dzięki

GJSmith3rd
źródło
1

Wydaje się, że to problem z pozwoleniem. Zwykle dzieje się tak, jeśli uprawnienia do niektórych plików / katalogów nie są poprawnie skonfigurowane. W większości przypadków są ~/.sshi ~/.ssh/*. W moim przypadku są /home/xxx.

Możesz zmienić poziom dziennika sshd, modyfikując /etc/ssh/sshd_config(wyszukaj LogLevel, ustaw na DEBUG), a następnie sprawdź dane wyjściowe, /var/log/auth.logaby zobaczyć, co dokładnie się wydarzyło.

Joey
źródło
3
Wygląda to zasadniczo identycznie z zaakceptowaną odpowiedzią i prawdopodobnie powinien być komentarzem, a nie odpowiedzią. Przy nieco większym przedstawicielu będziesz mógł dodawać komentarze . Do tego czasu nie używaj odpowiedzi jako obejścia.
Nathan Tuggy
Przepraszam, pomyślałem, że to sposób na rozwiązanie wszystkich rodzajów tego pytania. Teraz wiem, jak to zrobić, dzięki.
Joey
1

Moim problemem był zmodyfikowany plik AuthorizedKeysFile, gdy nie uruchomiono jeszcze automatyzacji wypełniania / etc / ssh / author_keys.

$sudo grep AuthorizedKeysFile /etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys
AuthorizedKeysFile  /etc/ssh/authorized_keys/%u
znak
źródło
1

Wystarczy spojrzeć na /var/log/auth.log na serwerze . Ustawienie dodatkowej gadatliwości za pomocą opcji -vv po stronie klienta nie pomoże, ponieważ serwer prawdopodobnie nie oferuje zbyt dużej ilości informacji potencjalnemu napastnikowi.

Edward van Kuik
źródło
1

Upewnij się, że skopiowałeś cały klucz publiczny authorized_keys; ssh rsaprefiks jest konieczne dla kluczem do pracy.

Willem
źródło
2
używane ssh-copy-id
vishnu
1

musisz zweryfikować właściwości plików. aby przypisać wymagane użycie nieruchomości:

$ chmod 600 ~/.ssh/sshKey
$ chmod 644 ~/.ssh/sshKey.pub
Manna
źródło
1

Spójrz /var/log/auth.logna serwerze pod kątem sshdbłędów uwierzytelniania.

Jeśli wszystko inne zawiedzie, uruchom sshdserwer w trybie debugowania:

sudo /usr/sbin/sshd -ddd -p 2200

Następnie połącz się z klientem:

ssh user@host -p 2200

W moim przypadku znalazłem sekcję dotyczącą błędów na końcu:

    debug1: userauth_pubkey: test whether pkalg/pkblob are acceptable for RSA SHA256:6bL+waAtghY5BOaY9i+pIX9wHJHvY4r/mOh2YaL9RvQ [preauth]
==> debug2: userauth_pubkey: disabled because of invalid user [preauth]
    debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa [preauth]
    debug3: userauth_finish: failure partial=0 next methods="publickey,password" [preauth]
    debug3: send packet: type 51 [preauth]
    debug3: receive packet: type 50 [preauth]

Dzięki tym informacjom zdałem sobie sprawę, że sshd_configograniczałem logowanie do członków sshgrupy. Następujące polecenie naprawiło ten błąd uprawnień:

sudo usermod -a -G ssh NEW_USER
cmcginty
źródło
0

w tej notatce upewnij się, że konfiguracja sshd ma -;

PermitRootLogin without-password

ustaw powyżej, a następnie uruchom ponownie sshd (/etc/init.d/sshd restart)

wyloguj się i spróbuj zalogować się ponownie!

domyślnie uważam, że -;

PermitRootLogin no
Edd Stance
źródło
0

W moim przypadku jest to spowodowane tym, że grupa użytkowników nie jest ustawiona w AllowGroups pliku konfiguracyjnego / etc / ssh / sshd_config. Po dodaniu wszystko działa dobrze.

pppk520
źródło
0

Mam katalog domowy w niestandardowej lokalizacji, aw sshdlogach mam ten wiersz:

Could not open authorized keys '/data/home/user1/.ssh/authorized_keys': Permission denied

nawet jeśli wszystkie uprawnienia były w porządku (zobacz pozostałe odpowiedzi).

Znalazłem rozwiązanie tutaj: http://arstechnica.com/civis/viewtopic.php?p=25813191&sid=0876f069ec2aa5fdcd691a2e2e7242c2#p25813191

W moim szczególnym przypadku:

  • dodano nową linię w /etc/selinux/targeted/contexts/files/file_contexts.homedirs:

    • to jest oryginalna linia zwykłych katalogów domowych:

      /home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0

    • to moja nowa linia:

      /data/home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0

  • następnie a restorecon -r /data/i sshdrestart

alexandrul
źródło
0

Miałem ten problem i żadna z pozostałych odpowiedzi go nie rozwiązała, choć oczywiście pozostałe odpowiedzi poprawne.

W moim przypadku okazało się, że /rootsam katalog (nie np. /root/.ssh) Miał złe uprawnienia. Potrzebowałem:

chown root.root /root
chmod 700 /root

Oczywiście te uprawnienia powinny być czymś takim (może chmod 770) niezależnie. Jednak to specjalnie zapobiega sshdod pracy, choć /root/.sshi /root/.ssh/authorized_keysobaj mieli odpowiednie uprawnienia i właścicieli.

Jason Cohen
źródło
0

Miałem ten problem, gdy dodałem grupę użytkownika logowania do innego użytkownika. Załóżmy, że istnieje użytkownik ssh-login o nazwie userA i użytkownik nie-ssh-login userB. użytkownik A ma również grupę użytkownik A. Zmodyfikowałem użytkownika B, aby mieć również użytkownika grupy A. Prowadzi do opisanego zachowania, aby użytkownik A nie mógł zalogować się bez monitu. Po usunięciu grupy userA z userB logowanie bez monitowania zadziałało ponownie.

Bevor
źródło