Сервер продолжает запрашивать пароль после того, как я скопировал мой открытый ключ SSH в authorized_keys


44

У меня есть сервер Ubuntu, работающий в облаке. Я создал пользователя ( git). В папке /home/gitя создал каталог .ssh/и authorized_keysфайл.

Но когда я помещаю свой открытый ключ SSH в authorized_keysфайл, сервер продолжает спрашивать у меня пароль.

Что я сделал не так?


Где вы размещаете свою публику? в пользовательском git или в root? как ты это получаешь? как ssh <you> @ <server> o <git> @ <server> или root @ <server> .. проверьте это и добавьте дополнительную информацию.
maniat1k

Ответы:


42

На стороне сервера демон ssh будет регистрировать ошибки /var/log/auth.log, поэтому проверьте этот файл, чтобы увидеть, о чем сообщается.

Со стороны клиента при установлении соединения вы можете добавить -vфлаг (или -vvили -vvv) для увеличения многословности. Вы можете определить свою проблему таким образом.

Вот другие вещи, чтобы проверить.

  • Убедитесь, что /home/git/.ssh/authorized_keysпринадлежит git.
  • Убедитесь, что /home/git/.ssh/authorized_keysесть режим 600 ( -rw-------).

Также проверьте /etc/ssh/sshd_configфайл.

  • PubkeyAuthentication должен быть установлен в yes
  • Существует также AuthorizedKeysFileдиректива, которая определяет путь, где должны находиться авторизованные ключи. Убедитесь, что он закомментирован или по умолчанию %h/.ssh/authorized_keys.

Благодарность! Я попробую этот вариант и позже вернусь к обратной связи!
Луис Далмолин

Что вы делаете, если вы не видите /var/log/auth.logфайл? Есть ли способ включить это?
Стив Роббинс

1
Журналы могут быть в / var / log / secure, если у вас нет /var/log/auth.log
CoverosGene

Глупая ошибка, я скопировал файл .pub прямо в папку .ssh на сервере, к которому я хотел подключиться. Убедитесь, что вы переместили его в папку author_keys.
ЦентрОрбит

Я также должен был удалить разрешения на групповую запись из моего домашнего каталога. Затем я перезапустил SSH сsudo service ssh restart
Дилан Пирс

19

Также убедитесь, что ваш домашний каталог пользователя (в вашем случае / home / git) доступен только для вас. У меня была эта проблема однажды, потому что мой домашний каталог был доступен для записи в группе. В /var/log/auth.log сказано: «Отказ в аутентификации: неправильное владение или режимы для каталога / home / chuck». (это сделано для того, чтобы убедиться, что он не использует файл author_keys, с которым кто-то кроме вас возился!)


Хотя это, безусловно, полезно, я думаю, что это скорее дополнение к ответу xeyes .
gertvdijk

1
Боже мой, спасибо большое! Мои глаза горели, потому что все поиски я сделал на Google. Наконец-то это сработало! Огромное спасибо.
GTRONICK

Человек, спасибо! я часами искал решение ... и это решило все мои проблемы.
Afaria

Ага. это было это. рад, что решил прочитать следующий ответ
Катюш

Также проверьте в / etc / passwd, что является домашним каталогом пользователя. Моей странной проблемой было то, что она не была стандартной
drodsou

5

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

Чтобы ssh(на стороне клиента) использовать аутентификацию pubkey, добавьте в sshкоманду несколько параметров :

ssh -o PubkeyAuthentication=yes -o PasswordAuthentication=no -X git@server

Если это работает, вы можете установить эту PasswordAuthentication=noопцию постоянно в конфигурационном файле клиента ssh для /etc/ssh/ssh_configвсей системы или ~/.ssh/configдля конкретного пользователя (подробности см. man ssh_config).


1
По умолчанию все настройки клиента SSH ( /etc/ssh/ssh_config) в системах Debian / Ubuntu уже предпочитают, PubkeyAuthentication и попробуйте сначала, как вы увидите при вызове sshв подробном режиме.
gertvdijk

3

Вы используете ~ / .ssh / config на локальном компьютере? Я столкнулся с этой проблемой, когда использую директиву IdentityFile в файле конфигурации и указываю на открытый ключ. Например:

Host Cloud
    Hostname cloud.theclouds.com
    User git
    IdentityFile ~/.ssh/config/mykey # This is correct

    # IdentityFile ~/.ssh/config/mykey.pub # This is incorrect


1

Еще одна вещь, чтобы проверить, есть ли дополнительные ключи возврата каретки в вашем открытом ключе. Я следовал совету выше, чтобы просмотреть /var/log/auth.log и увидел ошибку при чтении ключа. Ключ был длиной около двух строк вместо четырех. В ключ были вложены дополнительные возвраты каретки.

При использовании редактора vi используйте shift-j, чтобы соединить строки и стереть лишний пробел в строке ключа.


1
Я трижды проверил разрешения и sshd_config. Полчаса ударился головой о стену. Это была моя ошибка! Так или иначе, у меня появилась привычка заканчивать все файлы, которые я редактирую, дополнительным переводом строки. Даже с одним ключом и возвратом каретки в конце достаточно испортить авторизацию.
jrhorn424

Убедитесь, что у вас есть бит ----- END RSA PRIVATE KEY -----.
Тобыч

1

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

ssh-add path/to/private/key

1

Вы также можете добавить свой ключ в агент SSH:

u@pc:~$ ssh-agent bash
u@pc:~$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/u/.ssh/id_rsa: # ENTER YOUR PASSWORD
Identity added: /home/u/.ssh/id_rsa (/home/u/.ssh/id_rsa)

0

Также может быть, что вы звоните

sudo git clone gituser@domain:repo.git

где корень пользователей SSH ключ не был добавлен к authorized_keysизgituser


0

На машине под управлением Ubuntu 18.04.02 LTS предложение установить разрешения ~/.sshна 600 у меня не сработало. Я должен был установить разрешения на 700, а затем все работало нормально.


0

У меня были правильные права доступа к файлам .ssh / directory и author_keys, но я столкнулся с этой проблемой «запрос пароля» из-за другой, вызванной самим собой проблемы.

Я использовал выделение и копирование / вставку на основе мыши, чтобы скопировать информацию из моего локального id_rsa.pub в файл авторизованные ключи на сервере. Это успешно скопировало данные в виде одной строки, но там, где в конце видимых строк были нежелательные пробелы, которые было трудно увидеть при редактировании файла с помощью vi. После того, как я удалил эти ненужные места, я смог просто зайти в ssh.


0

Так что для меня случилось то, что у меня есть 2 виртуальные машины для доступа с моей локальной машины (2 ключа id_rsa.pub и id_rsa2.pub). Я понял, что мое соединение ssh по умолчанию использует id_rsa.pub для любого соединения ssh user@xx.xx.xx.xx. Я решил свою проблему, добавив файл конфигурации и указав идентификатор, который будет использоваться для каждого хоста, как показано ниже:

vi ~/.ssh/config

Add both hostnames and their identity file as follows:

Host server1.nixcraft.com
  IdentityFile ~/Users/.ssh/id_rsa1
Host server2.nixcraft.com
  IdentityFile /backup/home/aymen/.ssh/id_rsa2
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.