Почему не работает автоматический вход через ssh с авторизованными ключами?


12

Я создал частную / публичную пару ключей dsa. Я положил открытый ключ на сервере в

~/.ssh/authorized_keys

Все настроено как мой другой сервер, но кажется, что сервер просто игнорирует мои усилия.


Проверьте /etc/ssh/ssh_configи /etc/ssh/sshd_configубедитесь, что ничего, что вы хотите, отключено.
Кристофер Джонсон

Вы также захотите проверить sshd_config.
Вагнерр

Спасибо. Я обновил ответ (который первоначально упоминал только ssh_config).
Кристофер Джонсон

Все вышеперечисленные обсуждения идеально подходят, если вы используете ssh в стиле openssh. Если ваша система использует ssh2, то у нее есть совершенно другой способ управления ключами. Эта статья обсуждает как и что. burnz.wordpress.com/2007/12/14/…
Крис

1
Обычно проверка /var/log/auth.logв системах Debian или /var/log/secureRedHat должна дать вам четкий совет о том, что неправильно сконфигурировано (обычно проблемы с разрешениями)
Джованни Торальдо

Ответы:


15

Хотя ваша проблема, возможно, уже была решена другими авторами, я заблокировал достаточно машин, чтобы не проверять изменения sshd_config перед тем, как завершить работу, поэтому разработал следующий процесс, который может быть полезен для будущей отладки изменений конфигурации sshd:

НЕ ОТКЛЮЧАЙТЕ активное ssh-соединение, пока ПОСЛЕ тестирования не подтвердит, что поведение соответствует ожидаемому.

а. проверьте, что, по вашему мнению, должен делать sshd

б. проверьте правильность конфигурации, используя "-t"

с. запустить подробную «тестовую» версию сервера, который вы можете отслеживать в реальном времени

д. начать подробное «тестовое» клиентское соединение, которое вы можете отслеживать в реальном времени


а. проверьте, что, по вашему мнению, должен делать sshd

Просмотрите файл конфигурации sshd без всех комментариев, как показано ниже (при условии, что sshd_config является правильным файлом и находится в / etc / ssh)

$ grep -v "^ #" / etc / ssh / sshd_config | grep -v "^ $"

Это просто проясняет ситуацию, поэтому мы проверяем, что, по нашему мнению, мы меняем (не обязательно, правильно это или нет).

б. проверьте правильность конфигурации, используя "-t"

Со страницы справочника sshd, который я использую,

-t Тестовый режим. Только проверяйте действительность файла конфигурации и работоспособность ключей. Это полезно для надежного обновления sshd, поскольку параметры конфигурации могут измениться.

Другие изменения могут иметь более тонкие обстоятельства. Например, не отключайте аутентификацию по паролю, пока не убедитесь, что аутентификация с открытым ключом работает правильно.

с. запустить подробную «тестовую» версию сервера, который вы можете отслеживать в реальном времени

$ sudo / usr / sbin / sshd -ddd -p 9999

Это сохраняет ваш текущий рабочий сеанс активным, но дает вам другой экземпляр sshd для проверки ваших новых изменений конфигурации. SSHD теперь работает на переднем плане к пользовательскому порту (9999 в нашем примере.) И отправляет много шумной отладочной информации, которую вы можете отслеживать в / var / log / authlog (или, возможно, /var/log/auth.log в зависимости от в вашей ОС.)

д. начать подробное «тестовое» клиентское соединение, которое вы можете отслеживать в реальном времени

Запустите клиентское соединение ssh в подробном режиме, чтобы отобразить на экране больше информации, которая может привести к улучшению отладки вашей ошибки.

$ ssh -vvv -p 9999 имя-сервера

Теперь у вас должно быть достаточно информации либо в файлах журнала сервера, либо на экране подключения клиента, чтобы изолировать вашу проблему.

Решение обычно сводится к файлам прав (как показано Magnar и setatakahashi)

Удачи


Думаю, вам также следует проверить файл ssh_config на стороне клиента, чтобы убедиться, что он выполняет то, что вы ожидаете. Используйте что-то вроде приведенного ниже, чтобы получить комментарии:> grep -v "^ #" / etc / ssh / ssh_config | grep -v "^ $"
samt

Что ж, конфигурацию клиента ssh можно исправить в любое время, это сервер, с которого вы заблокировались, если настроили его неправильно.
Совьеро

33

Сервер проигнорирует ваш файл author_keys, если свойства владельца неверны. Изменение этого к этому исправляет это:

chmod 0700 ~/.ssh
chmod 0600 ~/.ssh/authorized_keys

6
ssh -vvv -l username server.domain сообщит вам, отправляете ли вы действительный ключ
Дейв Чейни,

Иногда я видел, как sshd жалуется на плохие права доступа к домашнему каталогу, поэтому я добавлял "chmod o-rwx ~" (или, по крайней мере, "chmod ow ~") в список, как это делал setatakahashi. Обычно это становится очевидным, когда отслеживается файл журнала - сообщения об ошибках, которые я там видел, всегда указывали в правильном направлении.
Олаф

Этот ответ кажется наиболее вероятным, но комментарий Дейва Чейни - единственный способ увидеть, что на самом деле происходит. Также проверьте журналы сервера.
DWC

Это была моя проблема. Я бился головой об этом часами. Спасибо!
Сэм Соффс

1
Это добилось цели, но мои предыдущие разрешения были 0775и 0644соответственно. Почему сокращение разрешений помогло? Это мера безопасности, которая где-то настроена?
Дин

11

$ chmod 700 ~

$ chmod 700 ~ / .ssh

$ chmod 600 ~ / .ssh / authorized_keys

Проверьте эти атрибуты в / etc / ssh / sshd_config

$ sudo grep PubkeyAuthentication / etc / ssh / sshd_config

Протокол $ sudo grep / etc / ssh / sshd_config


2
Отличное замечание о ~, вы должны убедиться, что никто, кроме вас, не может писать в ваш домашний каталог, иначе они могут переименовать ваш каталог ~ / .ssh
Дейв Чейни,

последний chmod должен быть: $ chmod 600 ~/.ssh/authorized_keysnot$ chmod 600 ~/.sHh/authorized_keys
SooDesuNe

3
какими должны быть значения атрибутов ?
Майкл

0

Еще один важный подводный камень ..

Если ваш домашний каталог зашифрован, sshd не будет иметь доступа к ~ / .ssh / authorized_keys ..

Смотрите этот ответ

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.