08 maja 2010 blog security ssh

Autoryzacja kluczami (SSH), opis najczęściej spotykanych problemów

Teoria

Generujemy parę kluczy, eksportujemy na serwer i zrobione.

ssh-keygen -t rsa #kilka razy potwierdzamy enterem
ssh-copy-id -i ~/.ssh/id_rsa.pub uzytkownik@serwerssh #kopiowanie kluczy

Programik ssh-copy-id można zastąpić doklejeniem id_rsa.pub na koniec .ssh/authorized_keys na serwerze. Po uprzednim skopiowaniu klucza publicznego, logujemy się na serwer i:

cat klient-id_rsa.pub >> ~/.ssh/authorized_keys

Jeszcze inny sposób:

cat ~/.ssh/id_rsa.pub | ssh -p 22 uzytkownik@serwerssh 'cat >> ~/.ssh/authorized_keys'

Więcej informacji na www.debian-administration.org, help.ubuntu.com oraz jimmyg.org.

Jeśli wszystko poszło dobrze, w tym momencie dostęp do serwera powinien być możliwy bez podawania hasła.

Gdyby dostęp wciąż był niemożliwy bez podawania hasła, przyczyn może być kilka.

Firewall

Naprawdę, sprawdź 2 razy konfigurację firewalla, forwardowanie portów w routerze, wpisy w /etc/hosts.allow i /etc/hosts.deny, konfigurację wszelkich filtrów w stylu iplist. Jak skończysz, sprawdź jeszcze raz. Większość błędów jest spowodowana pomyłką człowieka, więc na 80% problem jest spowodowany przez zapomnienie o którejś ze wspomnianych rzeczy.

Więcej informacji (niewiele więcej ;)) na forums.gentoo.org.

Ustawienia serwera

Chodzi o akceptowane sposoby łączenia się z serwerem SSH. Ja mam włączoną autoryzację hasłem (tak na wszelki wypadek) i kluczami. Odpowiadają za to następujące wpisy w /etc/ssh/sshd_config:

RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication yes

Po zmianie, należy zrestartować serwer ssh. W zależności od dystrybucji:

sudo /etc/rc.d/sshd restart

lub

sudo /etc/init.d/sshd restart

Uprawnienia

Należy się upewnić, że pliki mają nadane odpowiednie uprawnienia (na serwerze i na klientach).

chmod 700 ~/.ssh
chmod 644 ~/.ssh/*
chmod 600 ~/.ssh/id_rsa

OpenSSH 5.4

Problem objawia się komunikatem:

debug3: no such identity: /home/dmn/.ssh/id_dsa

Należy się w pierwszej kolejności upewnić, że prawa dostępu są dobrze ustawione (patrz: punkt wyżej). Natomiast we wspomnianej wersji OpenSSH musimy wskazać położenie kluczy klientów uprawnionych do logowania bez podania hasła. Odpowiada za to następujący wpis w konfiguracji (/etc/ssh/sshd_config):

AuthorizedKeysFile %h/.ssh/authorized_keys

Magiczne "%h" mówi serwerowi ssh, żeby przeszukał katalog domowy użytkownika.

Więcej informacji na www.gossamer-threads.com.

Odmowa użycia klucza

Problem objawia się komunikatem:

Agent admitted failure to sign using the key

W tym przypadku rozwiązań jest kilka.

  1. Ustawiamy zmienną przed połączeniem się z serwerem:

    SSH_AUTH_SOCK=0 ssh uzytkownik@serwerssh
    
  2. Używamy ssh-add, który powinien dodać naszą tożsamość do agenta autoryzacji:

    ssh-add; ssh uzytkownik@serwerssh
    
  3. Jeśli używamy gnome, prawdopodobnym sprawcą jest demon seahorse.

    gconftool-2 --set -t bool /apps/gnome-keyring/daemon-components/ssh false
    

Więcej informacji na bugs.launchpad.net.

No such identity

Problem objawia się komunikatem:

debug1: Next authentication method: publickey
debug1: Trying private key: /home/dmn/.ssh/jakasdziwnanazwa
debug3: no such identity: /home/dmn/.ssh/jakasdziwnanazwa

Rozwiązanie: podanie ścieżki do pliku id_rsa:

ssh -i ~/.ssh/id_rsa serwer

Dropbear

Ostatecznym rozwiązaniem, nie sprawdzonym przeze mnie, jest instalacja alternatywnego oprogramowania.

Więcej informacji na www.cybermilitia.net.

Nadal nie działa

No trudno, może tak miało być... Zbierz pliki konfiguracji, listingi plików z katalogów .ssh oraz informacje debugera i udaj się z tak przygotowaną paczuszką na jakieś forum linuksowe :)

Na koniec jeszcze jak włączyć wspomniane informacje. Na serwerze (z uprawnieniami root):

`which sshd` -ddd -p 2222

Na kliencie:

ssh -vvv uzytkownik@serwerssh -p 2222