Проверка подлинности SSH Kerberos завершается с ошибкой «Неправильный принципал в запросе / У меня нет учетных данных клиента» при сжатии Debian

8

У меня есть хост Debian Squeeze, на котором я не могу войти с помощью Kerberos без запроса пароля. Хост ubuntu 12.04 с одинаковой конфигурацией работает нормально и может войти в систему без запроса пароля.

После kinit, klist дает:

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

Теперь, когда я пытаюсь войти в систему через ssh в debian-squeeze, у меня появляется приглашение на ввод пароля. Если я проверяю свои билеты в этот момент без авторизации, я получаю:

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

Так что, очевидно, я получил билет. Тем не менее, журнал отладки ssh дает:

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

Это очень похоже на то, что описано здесь , здесь и в этом отчете об ошибках .

Мой DNS в порядке. Уже пытался воссоздать принципалы / ключи. Так что не помогло ни одно из решений, которые были там размещены.

Есть намеки?

b0ti
источник
Просто чтобы охватить основы, вы проверили, синхронизированы ли часы на всех машинах?
болтовня
Это все контейнеры lxc, работающие на одном физическом хосте. Часы не могут быть более синхронизированы, чем это.
b0ti

Ответы:

7

В примере вывода я вижу, что вы получили ключ для debian-squeezeимени хоста без каких-либо точек в нем. Это как бы доказывает, что вы установили обратное разрешение, чтобы указать на короткое имя. Это действительно не полное доменное имя, которое вы видите, или оно было отредактировано для вопроса?

Kerberos должен работать с любым из них, но вы можете перепроверить, что сам хост считает, что он вызывается debian-squeeze. Убедитесь, что прямой -> обратный поиск внутри debian-squeezeдействительно разрешает debian-squeeze:

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

На самом деле я не слышал о развертывании Kerberos с короткими именами, поэтому, если у вас есть выбор, возможно, стоит придерживаться полных доменных имен.

Обновить:

В настоящее время клиент получает ключ для короткого имени, но сервер считает, что он правильно назван с длинным именем. Скорее всего проблема есть. Просто чтобы быть уверенным, попробуйте следующее:

  1. Проверьте прямой / обратный поиск имени от клиента. Т.е.

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

    Возвращенное имя - это то, на которое клиент попытается получить билет. Судя по вашему выводу, это, вероятно, короткое имя.

  2. Проверьте, какие ключи присутствуют на сервере.

    $ 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
    ...
    

    В списке вы должны увидеть участника, соответствующего имени хоста из предыдущей команды. Если его там нет, тогда это твоя проблема. Если это там ...

  3. Убедитесь, что версия ключа на сервере Kerberos такая же, как и на debian-squeeze. На клиенте получите ключ явно и проверьте версию «KVNO» в конце строки:

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

В любом случае, имя хоста и версия "kvno" во всех этих командах должны совпадать.

chutz
источник
Хост называется 'debian-squeeze' и возвращается hostname. IP-адрес возвращается к полному доменному имени, поэтому указанная вами команда возвращает debian-squeeze.realm. Как примечание: у меня есть два ключа, настроенных для этого хоста, один для fqdn и один для короткого имени. Может ли это быть испортить?
b0ti
Очень хорошо, я обновил свой ответ с дальнейшими вещами, которые вы должны проверить. Это, скорее всего, путаница с коротким именем / полным доменным именем.
Chutz
Большое спасибо! Моя проблема действительно была вызвана дополнительным ключом с коротким именем хоста. Я просто хотел бы, чтобы было легче отлаживать такие проблемы, чтобы журналы указывали, что является проблемным принципалом.
B0ti
0

Я видел эту ошибку, когда / etc / hosts на сервере включает запись для своего IP-адреса, которая не совпадает с тем, что находится в DNS или в таблице ключей. Вы дважды проверили (или удалили) все записи не-localhost из / etc / hosts?

slushpupie
источник
DNS в порядке. Только записи localhost в / etc / hosts.
b0ti