10

Я успешно создал основанную на ключе аутентификацию для пользователя root с моей машины A на мою машину B.

Теперь я создал нового пользователя на машине B, так же, как на машине A, давайте назовем его USER . Я создал для него домашний каталог на машине B /home/USER и я хочу создать для него аутентификацию на основе ключей от машины A к машине B.

Итак, я побежал на машине

  1. ssh-keygen -t rsa , принял все пути, поэтому /home/USER/.ssh/id_rsa и без фраз
  2. ssh-copy-id -i /home/USER/.ssh/id_rsa.pub USER@BmachinesIP , ввел пароль и получил массаж

Теперь попробуйте войти в машину Bla Bla Bla

Так что, кажется, все в порядке.

Но когда я попытался подключиться через ssh USER@BmachinesIP меня спросили пароль. Я попытался просмотреть журнал и запустил ssh -vvv USER@BmachinesIP и вот часть вывода:

debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/USER/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/USER/.ssh/id_dsa
debug3: no such identity: /home/USER/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
USER@BmachinesIP's password:

Итак, кто-нибудь может сказать мне, что я сделал неправильно или что я должен изменить? Может быть, проблема в разрешениях, вот они:

на машине:

drwx------  2 USER USER    SIZE DATE TIME .ssh
-rw-------  1 USER USER 1675 2011-10-31 14:36 id_rsa
-rw-r--r--  1 USER USER 413 2011-10-31 14:36 id_rsa.pub

и на машине B:

drwx------  2 USER defaultGroup    SIZE DATE TIME .ssh
-rw-------    1 USER defaultGroup    SIZE DATE TIME authorized_keys

3 ответа3

13

Я нашел решение. Возникла проблема с разрешениями.

/home/USER на удаленной машине были предоставлены все разрешения, но для аутентификации на основе ключа должно быть установлено значение 755

2

Та же проблема для меня свежая установка CentOS7.

1. проверьте разрешения home dir и разрешения ~/.ssh и ~/.ssh/authorized_keys (согласно @erik)

chmod o-w ~/; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys

2. проверьте настройки /etc /ssh /sshd_config && service sshd restart (после каждого редактирования). Полезно: попробуйте "LogLevel VERBOSE" в sshd_config.

Я все еще получил запрос пароля после проверки всего, что было хорошо.

Запустите ssh-клиент с логами -vvv:

debug3: send_pubkey_test 
debug2: we sent a publickey packet, wait for reply

Журналы сервера (/var/log/secure):

Failed publickey for * from * port * ssh2: RSA *

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

Если я запускаю sshd на другом порту 'sshd -p 5555 -d'. Ключ работал. Логин без пароля в порядке. WTF?

Затем я отключил selinux (установите SELINUX = отключено в /etc /selinux /config) и перезагрузился. Логин без пароля тогда работал нормально.

мои текущие рабочие настройки sshd_config:

[root@hp-bl-05 ~]# grep -vE "^#|^$" /etc/ssh/sshd_config  
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
SyslogFacility AUTHPRIV
LogLevel VERBOSE
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys
HostbasedAuthentication yes
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem   sftp    /usr/libexec/openssh/sftp-server

Так что было бы неплохо узнать, можем ли мы изменить что-то маленькое в selinux, чтобы заставить работать ssh-пароль без пароля. Кто-нибудь может улучшить ответ?

0

Решение заключается не в отключении SELinux, а в исправлении разрешений SELinux для пользовательского каталога. Контекст каталога пользователя должен быть установлен в user_home_t .

Проверять,

$ sudo ls -Z /home/

Если контекст для вашего пользовательского каталога отличается от user_home_t , SELinux не разрешит SSH через открытый ключ в этот пользовательский каталог для этого пользователя.

Чинить,

$ sudo semanage fcontext -a -t user_home_t /home/azureuser
$ sudo restorecon -vvRF /home/azureuser

Вход на основе ключа теперь должен работать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .