SSH больше не позволяет аутентификацию с открытым ключом


22

Моя машина недавно перестала принимать входящую аутентификацию с открытым ключом. У меня есть рабочий стол Ubuntu 11.04, который я использую с компьютера Windows. Я использую замазку с театрализованным представлением. Я могу подключиться, но только с интерактивной аутентификацией по паролю, а не с моим ключом rsa, который я настроил.

Я уже проверил, что ключ указан в ~ / .ssh / authorized_keys. Как мне это исправить и что я проверяю?


2
Сначала проверьте , что все три ~, ~/.sshи ~/.ssh/authorized_keysбудут доступны для записи только вам (в частности , разрешение на запись не группы). Ищите /var/log/auth.logзаписи журнала, созданные во время ваших попыток входа в систему. Скопируйте и вставьте их в свой вопрос (редактируя имена для конфиденциальности, если хотите). Также проверьте, связана ли проблема исключительно со стороны сервера: скопируйте закрытый ключ на компьютер с Linux (вам необходимо преобразовать файл закрытого ключа PuTTY в формат OpenSSH) и посмотрите, ssh localhostработает ли он .
Жиль "ТАК - перестань быть злым"

мой домашний каталог был доступен для записи по некоторым причинам. Это исправило это. Поместите это как ответ, чтобы я мог принять это.
Эндрю Редд

Ответы:


28

Если аутентификация с открытым ключом не работает: убедитесь, что на стороне сервера, ваш домашний каталог ( ~), ~/.sshкаталог и ~/.ssh/authorized_keysфайл доступны для записи только их владельцу . В частности, ни один из них не должен быть доступен для записи группе (даже если пользователь в группе один). chmod 755или chmod 700в порядке, chmod 770нет.

Что проверить, если что-то не так:

  • Запустите, ssh -vvvчтобы увидеть много отладочной информации. Если вы задаете вопрос, почему вы не можете соединиться с ssh, включите этот вывод (вы можете захотеть анонимизировать имена хостов и пользователей).
  • Если можете, проверьте сервер, входит в систему /var/log/auth.log.
  • Если аутентификация с открытым ключом не работает, проверьте разрешения еще раз, особенно групповой бит (см. Выше).


1
Хороший ответ! Я забыл свой домашний каталог: o
RobAu

Если вы используете последнюю версию ssh (или sshd), ключи DSA больше не поддерживаются по умолчанию из-за проблем безопасности. Единственное реальное исправление - это обновление до RSA или более качественных ключей.
Микко Ранталайнен,

Я изменил права доступа к моей домашней папке и что? Я был заблокирован из SSH! Я изменил ключи SSH, нет, сервер по-прежнему отказывается от подключения! Я сошел с ума, пытаясь найти решение, и с вашим ответом chmod 700 на мою домашнюю папку ssh начал работать !!!!!!! Благодарность! Если мое терминальное соединение оборвалось при попытке найти решение, я был бы полностью заблокирован сервером. Так что будьте осторожны, чтобы не играть с разрешениями вашей домашней папки! (Я просто изменил права доступа к своей домашней папке, но не к папке .ssh, но все еще заблокирован из SSH)
Tarik

9

Я столкнулся с тем же и, наконец, понял, что это потому, что я зашифровал мой домашний каталог. SSH не может прочитать файл author_keys до тех пор, пока вы не войдете в систему, поэтому в основном он заставляет вас сначала пройти аутентификацию по паролю. Смотрите раздел о зашифрованном домашнем каталоге по следующей ссылке:

https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Encrypted_Home_Directory


5

Если вы проверите разрешения на каталоги, и там есть «.» сразу после них у вас может быть включен selinux, что приведет к путанице с обменом ключами, и по умолчанию будет установлена ​​идентификация пароля вручную.

Вы можете отключить SELinux для устранения неполадок, следуя инструкциям здесь: http://www.centos.org/docs/5/html/5.1/Deployment_Guide/sec-sel-enable-disable-enforcement.html , или просто измените / etc / selinux / config и измените его с «принудительного» на «отключенный».

Надеюсь это поможет.


У меня был включен selinux, но отключение не помогло. Для меня это было уловкой chmod 600 ~/.ssh/authorized_keys- файл был доступен для записи группой. (через pyrosoft.co.uk/blog/2013/01/12/… )
Дэвид Карбони

Это помогло мне! Спасибо!
907

Вы также должны иметь возможность заставить SSH-аутентификацию работать с SELinux, установив правильный контекст SELinux. Восстановление настроенных системой контекстов в вашем домашнем каталоге ( restorecon ~ -R) является хорошей отправной точкой.
Джош Келли

4

Я хотел бы убедиться, что у вас есть правильные настройки в / etc / ssh / sshd_config.

Чтобы принудительно использовать только PKI и запретить пароли, найдите строку

#PasswordAuthentication yes 

в вашем файле раскомментируйте его и установите

PasswordAuthenticate no

Я также прочитал бы баланс настроек, чтобы убедиться, что они имеют смысл. В частности, постарайтесь убедиться, что вы используете ключи RSA, поскольку известно, что DSA взломан.


11
Вы объясняете, как отключить аутентификацию по паролю. Это не поможет заставить аутентификацию с открытым ключом работать (сначала проверяется открытый ключ). Эндрю: не отключайте аутентификацию по паролю, пока не убедитесь, что аутентификация с открытым ключом работает!
Жиль "ТАК - перестань быть злым"

2

Одной из возможных причин проблемы является то, что у вас есть ключи DSA, но теперь SSH (по-видимому) по умолчанию требует наличия ключей RSA. У меня проблема при обновлении до 16.04. Вы можете увидеть больше здесь, но краткий ответ - добавить следующее ~/.ssh/config:

PubkeyAcceptedKeyTypes ssh-dss


1

Из-за необходимости устранения неполадок связи между двумя разными машинами у меня было два закрытых ключа ~/.sshна стороне клиента.

Вместо того, чтобы настраивать каждый хост сервера с соответствующим закрытым ключом, ~/.ssh/identityкак я должен был сделать, у меня был вторичный (и в данном случае неправильный) ключ, настроенный для всех хостов:

Host *
IdentityFile ~/.ssh/identity_b

Исправление ~/.ssh/identityрешило проблему:

Host a
IdentityFile ~/.ssh/identity_a
Host b
IdentityFile ~/.ssh/identity_b

0

У меня была та же проблема, но поменять разрешения chmodне помогло, так как оказалось, что у меня нет владельца ~/.ssh/authorized_keysфайла. Вы можете изменить владельца .sshкаталога с помощью:

sudo chown -R "$USER" ~/.ssh

-1

Каким-то образом это сработало для меня:

root @ kaiser: ~ # vim / etc / ssh / sshd_config

Измените эту строку с да на нет 28 StrictModes нет

Попробуйте еще раз

sysadmin @ suselinux1: ~> con sysadmin kaiser Добро пожаловать в Ubuntu 12.04.1 LTS (GNU / Linux 3.2.0-25-generic i686)

Последний вход в систему: Пт 9 ноября 15:40:11 2012 с 10.1.3.25 sysadmin @ kaiser: ~ $ date vie nov 9 17:53:11 CST 2012 sysadmin @ kaiser: ~ $


3
Делать что-то, не зная, что он делает и почему это работает, может быть приемлемо, но предлагать то же самое - плохо, и, честно говоря, хуже, если это касается системы безопасности.
Махеш

2
согласовано. пусть это будет стимулом для создания лучших sshdдокументов, которые точно не попадают в категорию «хорошее чтение в субботу»
code_monk
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.