Otentikasi SSH Kerberos gagal dengan “Prinsipal yang salah dalam permintaan / Tidak memiliki kredensial klien” saat diperas debian

8

Saya memiliki host pemeras debian di mana saya tidak bisa masuk dengan kerberos tanpa kata sandi. Host ubuntu 12.04 yang dikonfigurasi secara identik berfungsi dengan baik dan dapat masuk tanpa mendapatkan prompt kata sandi.

Setelah kinit, klist memberikan:

Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: boti@REALM

Valid starting    Expires           Service principal
14/02/2013 16:37  15/02/2013 16:37  krbtgt/REALM@REALM

Sekarang ketika saya mencoba masuk lebih dari ssh ke debian-squeeze saya disajikan dengan prompt kata sandi. Jika saya memeriksa tiket saya pada titik ini tanpa melakukan auth, saya mendapatkan:

Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: boti@REALM

Valid starting    Expires           Service principal
14/02/2013 16:37  15/02/2013 16:37  krbtgt/REALM@REALM
14/02/2013 16:38  15/02/2013 16:37  host/debian-squeeze@
14/02/2013 16:38  15/02/2013 16:37  host/debian-squeeze@REALM

Jadi jelas saya mendapat tiket. Namun log debug ssh memberikan:

Postponed gssapi-with-mic for boti from 192.168.255.98 port 59557 ssh2
debug3: mm_request_send entering: type 40
debug3: mm_request_receive_expect entering: type 41
debug3: mm_request_receive entering
debug3: monitor_read: checking request 40
debug1: Unspecified GSS failure.  Minor code may provide more information
Wrong principal in request

Ini sangat mirip dengan apa yang dijelaskan di sini , di sini , dan dalam laporan bug ini .

DNS saya baik-baik saja. Sudah mencoba membuat ulang prinsipal / kunci. Jadi tidak ada solusi yang membantu yang diposting di sana.

Ada petunjuk?

b0ti
sumber
Hanya untuk menutupi dasar-dasarnya, sudahkah Anda memeriksa apakah jam pada semua mesin disinkronkan?
chutz
Ini semua adalah kontainer lxc yang berjalan pada host fisik yang sama. Jam tidak bisa lebih disinkronkan daripada ini.
b0ti

Jawaban:

7

Dalam output sampel saya melihat bahwa Anda mendapat kunci untuk debian-squeeze- nama host tanpa titik di dalamnya. Ini membuktikan bahwa Anda mengatur resolusi terbalik untuk menunjuk ke nama pendek. Apakah itu benar-benar nama non-FQDN yang Anda lihat, atau itu diedit untuk pertanyaan?

Kerberos harus bekerja dengan baik, tetapi Anda dapat memeriksa bahwa tuan rumah itu sendiri berpikir itu disebut debian-squeeze. Periksa bahwa forward -> reverse lookup di dalamnya debian-squeezebenar-benar memutuskan untuk debian-squeeze:

$ getent hosts $(hostname) | awk '{print $1; exit}' | xargs getent hosts | awk '{print $2}'

Saya belum pernah benar-benar mendengar tentang Kerberos yang digunakan dengan nama pendek, jadi jika Anda punya pilihan, mungkin ide yang bagus untuk tetap menggunakan FQDN.

Memperbarui:

Klien saat ini mendapatkan kunci untuk nama pendek, tetapi server berpikir itu benar nama dengan nama panjang. Kemungkinan besar masalahnya ada di sana. Untuk memastikannya, coba yang berikut ini:

  1. Periksa pencarian nama maju / mundur dari klien. Yaitu

    $ getent hosts debian-squeeze | awk '{print $1; exit}' | xargs getent hosts | awk '{print $2}'
    

    Nama yang dikembalikan adalah nama yang akan dicoba klien untuk mendapatkan tiketnya. Menilai dari keluaran Anda, ini mungkin nama pendek.

  2. Periksa kunci apa yang ada di server.

    $ sudo klist -k /etc/krb5.keytab
    Keytab name: WRFILE:/etc/krb5.keytab
    KVNO Principal
    ---- --------------------------------------------------------------------------
       1 host/debian-squeeze.realm@REALM
       1 host/debian-squeeze.realm@REALM
       1 host/debian-squeeze.realm@REALM
       1 host/debian-squeeze.realm@REALM
    ...
    

    Dalam daftar Anda harus melihat kepala sekolah yang cocok dengan nama host dari perintah sebelumnya. Jika tidak ada di sana, itu masalah Anda. Jika ada ...

  3. Verifikasi versi kunci pada server kerberos sama dengan yang aktif debian-squeeze. Di klien, dapatkan kunci secara eksplisit dan verifikasi versi "KVNO" di akhir baris:

    $ kvno host/debian-squeeze.realm
    host/debian-squeeze.realm@REALM: kvno = 1
    

Bagaimanapun, nama host dan versi "kvno" di semua perintah ini harus cocok.

chutz
sumber
Tuan rumah disebut 'debian-squeeze' sebagaimana dikembalikan oleh hostname. IP memetakan kembali ke FQDN, jadi perintah yang Anda berikan mengembalikan 'debian-squeeze.realm'. Sebagai catatan tambahan: Saya memiliki dua tombol yang diatur untuk host ini, satu untuk fqdn dan satu untuk nama pendek. Mungkinkah ini mengacaukan?
b0ti
Baiklah, saya memperbarui jawaban saya dengan hal-hal lebih lanjut yang harus Anda periksa. Kemungkinan besar adalah nama pendek / kebingungan FQDN.
chutz
Terima kasih banyak! Masalah saya memang disebabkan oleh kunci ekstra dengan nama host pendek. Saya hanya berharap akan lebih mudah untuk men-debug masalah-masalah seperti itu sehingga log menunjukkan apa kepala sekolah yang bermasalah.
b0ti
0

Saya telah melihat kesalahan ini ketika / etc / hosts di server menyertakan entri untuk alamat IP-nya yang tidak cocok dengan apa yang ada di DNS atau keytab. Sudahkah Anda mengecek (atau menghapus) semua entri non-localhost dari / etc / hosts?

slushpupie
sumber
DNS baik-baik saja. Hanya entri localhost di / etc / hosts.
b0ti