Доброго времени суток, случайные и неслучайные читатели.
Не так давно, а именно около месяца назад, появилась у меня идея - настроить аутентификацию по публичному ключу на домашний компьютер через SSH. Это более безопастно и более удобно, чем авторизация по паролям. Я не буду здесь объяснять, как настроить аутентификацию по публичным ключам, так как в интернете есть тьма-тьмущая всяких how-to по этой теме - от самых простых, до подробнейших руководств. К примеру, есть цикл статей от Дэниела Роббинса (создателя Gentoo Linux) на IBM DeveloperWorks:
- Part 1: http://www.ibm.com/developerworks/library/l-keyc/index.html
- Part 2: http://www.ibm.com/developerworks/library/l-keyc2/
- Part 3: http://www.ibm.com/developerworks/library/l-keyc3/
А сейчас я лишь хочу упомянуть про одни грабли, на которые я наступил при настройке SSHD. Причём грабли я подложил сам себе и набил немало шишек, пытаясь найти причину, почему через локальную сеть с ПК на ноутбук аутентификация по ключам работает, а наоборот - нет. Будто бы для настройки SSH на моём ПК под Gentoo Linux требовалось какое-то сакральное знание, которым я не обладал.
Пару дней длился поиск проблемы, были испробованы разные комбинации настроек, двадцать раз проверены права на каталог ~/.ssh и файл authorized_keys (как известно, ssh трепетно относится к выставленным правам на его файлы), в общем - была потрачена уйма времени (я занимался этим в выходные :)). Ничего не помогало - источник проблемы ускальзал от меня с удивительной ловкостью. В конце-концов я принял волевое решение оставить решение этой проблемы до лучших времён.
И вот, сегодня я решил опять попробовать найти источник проблемы. Часто так бывает, что по прошествии некоторого времени проблема решается "за пять минут". Взял свой коммуникатор под управлением Android и установленным ConnectBot, проверил, занесён ли ключ, сгенерированный на коммуникаторе, в файл ~/.ssh/authorized_keys. Всё настроено, пытаюсь подключится - ничего.
$ tail -f /var/log/messages
тоже молчит.
Ну, это мы уже проходили. Неплохо бы получить больше информации в лог. Открываю конфигурационный файл /etc/ssh/sshd_config, нахожу переменную LogLevel - установлена в INFO. Открываю man-страницу на конфиг sshd_config, нахожу описание переменной LogLevel. Значение DEBUG2 включает режим подробного вывода в лог сообщений SSHD. Выставляю LogLevel DEBUG2, перезапускаю SSHD:
$ rc-config restart sshd
Пробую подключиться на ПК с телефона. Ага, вот и подсказка: файл /home/avp/.ssh/autorized_keys не найден. Стоп, мне кажется, или в имени файла ошибка? Пропущена буква "h" в слове "authorized". Переименовываю файл:
$ cd ~/.ssh/
$ mv autorized_keys authorized_keys
Пробую подключиться - работает!..
Вот так, казалось бы, такая мелочь, как одна пропущенная буква, приводит к серьёзным последствиям. Прямо как в стихотворении Самуила Маршака:
Не было гвоздя -
Подкова
Пропала.
Не было подковы -
Лошадь
Захромала.
Лошадь захромала -
Командир
Убит.
Конница разбита -
Армия
Бежит.
Враг вступает в город,
Пленных не щадя,
Оттого, что в кузнице
Не было гвоздя.