Назад | Перейти на главную страницу

Аутентификация SSH Kerberos завершается с ошибкой «В запросе указан неверный участник / нет учетных данных клиента» в debian squeeze

У меня есть хост debian squeeze, на котором я не могу войти в систему с помощью Kerberos без запроса пароля. Идентично настроенный хост ubuntu 12.04 работает нормально и может войти в систему без запроса пароля.

После кинита 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 в порядке. Уже пробовал пересоздавать принципалы / ключи. Так что ни одно из решений, которые были там опубликованы, не помогло.

Есть подсказки?

В примере вывода я вижу, что у вас есть ключ для 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" во всех этих командах должны совпадать.

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