Додавання відкритого ключа до ~ / .ssh / санкціонованих_кейсів не входить автоматично в систему


446

Я додав відкритий ключ SSH до файлу санкціонованих ключів . ssh localhostповинен увійти до мене, не запитуючи пароль.

Я це зробив і спробував набрати текст ssh localhost, але він все ще просить мене ввести пароль. Чи є ще одна установка, яку я повинен пройти, щоб змусити її працювати?

Я дотримувався інструкцій щодо зміни дозволів:

Нижче результат, якщо я це зробити ssh -v localhost.

debug1: Reading configuration data /home/john/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/john/.ssh/identity type 1
debug1: identity file /home/john/.ssh/id_rsa type -1
debug1: identity file /home/john/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.7p1 Debian-8ubuntu3
debug1: match: OpenSSH_4.7p1 Debian-8ubuntu3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'localhost' is known and matches the RSA host key.
debug1: Found key in /home/john/.ssh/known_hosts:12
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/john/.ssh/identity
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>

Потім він запитує прохідну форму після вищевказаного журналу. Чому він не входить до мене без пароля?


5
Хоча тут і не так, якщо ви приїжджаєте з Google і використовуєте зашифрований домашній каталог, sshd не зможе отримати доступ до нього, а тому не зможе прочитати файл дозволених ключів. Ось рішення: bugs.launchpad.net/ubuntu/+source/openssh/+bug/362427/comments/…
Daniel Schaffer

Відповіді:


1097

Потрібно перевірити дозволи authorized_keysфайлу та папки / батьківських папок, у яких він знаходиться.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Для отримання додаткової інформації див. Цю сторінку .

Вам також може знадобитися змінити / перевірити дозволи домашнього каталогу, щоб видалити доступ для запису для групи та інших.

chmod go-w ~

6
Ну щось із вищезазначеного спрацювало, хоча це не "chmod -R go-wrx foobar" досить драматично? Чому потрібна рекурсивна?
Йоахім

9
У другій частині не потрібно робити це рекурсивно, достатньо лише зробити chmod go-wrx foobarце. Якщо це робити рекурсивно, це може серйозно знищити деякі програми, якщо у вас є група або інший доступ до файлів, особливо якщо це веб-каталог.
StingeyB

24
Як уже згадувалося в FAQ FAQ OpenSSH, в домашній каталог & .ssh користувача потрібно лише написати дозвіл, видалений для групи / інших (так chmod go-w $HOME $HOME/.sshце зробить трюк). Таким чином, права доступу можуть бути настільки ж "відкритими", як 755 для обох каталогів, якщо ви так схильні. Найпростіші та найменш інвазивні команди - у FAQ: openssh.org/faq.html#3.14
davidjb

3
Чому б це не спрацювало для мене, поки я цього не зробив chmod 700 ~/.ssh && chmod 644 ~/.ssh/authorized_keys? 600 не працювали там, де 644 робили ...
ficuscr

3
Мені це також потрібно було, sudo chown -R {$USER}:{$USER} ~/.ssh/тому що я записав authorized_keysфайл як root.
Зейн Хупер

155

SELinux також може змусити не працювати авторизовані ключі. Особливо для root у CentOS 6 та 7. Хоча не потрібно його відключати. Після того, як ви переконалися, що ваші дозволи є правильними, ви можете виправити це так:

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
restorecon -R -v /root/.ssh

7
Це restoreconте, що вам потрібно після копіювання файлів вручну, наприклад, на новий жорсткий диск. (Ви, мабуть, повинні запустити його на всіх файлах у цьому випадку.
Вдається

Ще один щасливий кемпер тут. Це була моя проблема в RHEL 6.5
Антоніо Ортеллс

2
9/10 разів, питання "чому це не працює, це завжди працює" - це проблема selinux.
Ендрю Білий

вирішив проблему на сервері 1and1 (1und1)
музикант

104

налаштування ssh санкціонованих_кейсів здається простим, але ховає деякі пастки, які я намагаюся зрозуміти

- СЕРВЕР -

в / etc / ssh / sshd_config встановлено, passwordAuthentication yesщоб сервер тимчасово приймав автентифікацію пароля

- КЛІЄНТ -

розглянути cygwin як емуляцію Linux та встановити & запустити openssh

1. генерувати приватні та відкриті ключі (сторона клієнта) # ssh-keygen

тут натискаючи просто ENTER, ви отримуєте DEFAULT 2 файли " id_rsa " та " id_rsa.pub " у ~ / .ssh /, але якщо ви дасте ім'я_для_ке_керею, згенеровані файли зберігаються у вашому pwd

2. розмістіть your_key.pub на цільовій машиніssh-copy-id user_name@host_name

якщо ви не створили ключ за замовчуванням, це перший крок, щоб піти не так ... вам слід скористатися

ssh-copy-id -i path/to/key_name.pub user_name@host_name

3. Ведення журналу ssh user_name@host_nameпрацюватиме лише для id_rsa за замовчуванням, тому ось вам потрібна друга пасткаssh -i path/to/key_name user@host

(використовуйте опцію ssh -v ..., щоб побачити, що відбувається)

Якщо сервер все ще запитує пароль, тоді ви дали smth. щоб ввести пароль: коли ви створили ключі (так це нормально)

якщо ssh не слухає порт за замовчуванням, потрібно використовувати порт 22 ssh -p port_nr

- СЕРВЕР -----

4. змінити / etc / ssh / sshd_config мати

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  %h/.ssh/authorized_keys

(не зустрічається у випадку)

Це вказує ssh приймати санкціоновані_ ключі та шукати в домашній директорії користувача для введення файлу key_name, записаного у .ssh / autoriziran_keys файл

5 встановити дозволи в цільовій машині

chmod 755 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Також вимкніть пропуск авт

passwordAuthentication no

щоб закрити ворота для всіх ssh root / admin /....@ your_domain спроб

6 переконайтесь, що право власності та групової власності на всі некорінні домашні каталоги є відповідними.

chown -R ~ usernamehere
chgrp -R ~/.ssh/ user 

=================================================

7. розгляньте видатний http://www.fail2ban.org

8. додатковий ssh TUNNEL для доступу до сервера MySQL (bind = 127.0.0.1)


5
Зауважте, що "всього 4 безпеки" - це не лише безпека! SSH ігнорує файл, якщо він не має обмежувальних дозволів.
Навін

Забезпечення власності було б чудовим доповненням до цього списку
steviejay

1
Я про це не здогадувався ssh-copy-id! Саме цей крок дав би чудову відповідь.
Джеймс Мармур

1
chmod 755 ~ / .ssh замість 700, що я бачу в інших місцях, здавалося, це роблять
Джим W каже, що відновити Моніку

36

Також переконайтесь, що ваш домашній каталог не можна записувати іншими

chmod g-w,o-w /home/USERNAME

Відповідь викрадено звідси


4
Робота chmod 700 ~/.ssh ; chmod 600 ~/.ssh/authorized_keys ; chmod g-w,o-w ~працювала на мене. Дякую.
gbraad

1
чому б не використовувати просто chmod og-w /home/USERNAMEзамість цього?
Paramvir Singh Karwal

13

відчайдушні можуть також переконатися, що вони не мають зайвих нових рядків у файлі санкціонованих ключів через копіювання тексту id_rsa.pub із заплутаного терміналу.


2
Саме це сталося зі мною! два термінали однакової ширини, тому важко розібратися, поки я не ввімкнув номери рядків, щоб побачити два рядки у файлі санкціонованих_кісів.
Шон

1
Це. Я просто витратив годину через це. І це не перший раз. У відповіді @ bortunac згадується інструмент ssh-copy-id, який я буду використовувати в майбутньому, щоб уникнути цього.
xdhmoore

Я отримав вміст id_rsa.pubвикористання moreзамість cat, що було фатальним через невидимих ​​переривів рядків.
Ден Халберт

8

користувач - ваше ім'я користувача

mkdir -p /home/user/.ssh
ssh-keygen -t rsa
touch /home/user/.ssh/authorized_keys
touch /home/user/.ssh/known_hosts
chown -R user:user /home/user/.ssh
chmod 700 /home/user/.ssh
chmod 600 /home/user/.ssh/id*
chmod 644 /home/user/.ssh/id*.pub
chmod 644 /home/user/.ssh/authorized_keys
chmod 644 /home/user/.ssh/known_hosts

Краще для кореня:mkdir -p /home/$USER/.ssh && chown -R $USER:$USER /home/$USER/.ssh && sudo -u $USER ssh-keygen -t rsa && touch /home/$USER/.ssh/authorized_keys && touch /home/$USER/.ssh/known_hosts && chmod 700 /home/$USER/.ssh && chmod 600 /home/$USER/.ssh/id* && chmod 644 /home/$USER/.ssh/id*.pub && chmod 644 /home/$USER/.ssh/authorized_keys && chmod 644 /home/$USER/.ssh/known_hosts && vim /home/$USER/.ssh/authorized_keys # paste keys here!
Одіссей

7

Остерігайтеся, що SELinux також може викликати цю помилку, навіть якщо всі дозволи здаються нормальними. Вимкнення його зробило для мене хитрість (вставте звичайні відмови від заборони).


Ви можете бачити, як втручається SELinux /var/log/audit/audit.log. restorecon -R -v /root/.sshвиправив мій конкретний випадок.
Дейв Гуделл

7

Перерахування відкритого ключа у .ssh / autori_keys необхідне, але недостатньо, щоб sshd (сервер) прийняв його. Якщо ваш приватний ключ захищений парольною фразою, вам потрібно буде щоразу вводити ssh (client). Або ви можете використовувати ssh-агент або еквівалент GNOME.

Ваш оновлений трасування відповідає приватному ключу, захищеному парольною фразою. Дивіться ssh-агент або використовуйте ssh-keygen -p.


5

Написати команду:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Після цього переконайтесь, що ваш директор такий:

drwx------ 2 lab lab 4.0K Mar 13 08:33 .
drwx------ 8 lab lab 4.0K Mar 13 08:07 ..
-rw------- 1 lab lab  436 Mar 13 08:33 authorized_keys
-rw------- 1 lab lab 1.7K Mar 13 07:35 id_rsa
-rw-r--r-- 1 lab lab  413 Mar 13 07:35 id_rsa.pub

1
чим ваша відповідь відрізняється від прийнятої? Ви написали це через 3 роки за допомогою команди Ctrl + C Ctrl-V?
stinger

5

Що, нарешті, для мене зробило трюк - переконатися, що власник / група не root, а користувач:

chown -R ~/.ssh/ user
chgrp -R ~/.ssh/ user 

chown: недійсний користувач: '/home/lsa/.ssh/'
Степан Яковенко

3

Спробуйте "ssh-add", який працював на мене.


3

Ще одна порада, яку потрібно пам’ятати. Оскільки v7.0 OpenSSH відключає DSS / DSA ключі за замовчуванням через їх успадковану слабкість. Тож якщо у вас є OpenSSH v7.0 +, переконайтеся, що ваш ключ немає ssh-dss.

Якщо ви застрягли з ключами DSA, ви можете повторно включити підтримку на місцевому рівні шляхом поновлення sshd_configі ~/.ssh/configфайли з лініями як так:PubkeyAcceptedKeyTypes=+ssh-dss


3

У моєму випадку мені потрібно було помістити свій authorized_keysфайл .openssh.

Це місце вказано в /etc/ssh/sshd_configопції AuthorizedKeysFile %h/.ssh/authorized_keys.


Існує цілий клас проблем, які можуть виникнути на сервері (при спробі підключення з клієнтом), які неможливо налагодити без доступу до сервера ... Це за допомогою приховування інформації від зловмисних клієнтів, але ускладнює налагоджувати.
qneill

2

Переконайтеся, що для цільового користувача встановлено пароль. Виконати, passwd usernameщоб встановити один. Це було потрібно для мене, навіть якщо вхід пароля SSH був відключений.


2

це вирішує мою проблему

ssh-agent bash

ssh-add


Поясніть, що це робить, будь ласка.
Любослав Канев

Ssh-агент зберігає ваші ключі ssh .. команда bash запускає новий екземпляр своєї оболонки. і ssh-add розблоковує ваші ключі та завантажує їх
Джуліан

2

Ще одне питання, яким ви повинні подбати. Якщо створений файл не є типовим, id_rsa і id_rsa.pub

Ви повинні створити .ssh / config файл та визначити вручну, який ідентифікаційний файл ви будете використовувати під час з'єднання.

Приклад тут:

host remote_host_name
hostname 172.xx.xx.xx
user my_user
IdentityFile /home/my_user/.ssh/my_user_custom.pub

2
Файл IdentityFile повинен бути приватним ключем
Кен Х

@KenH так, звичайно. помилково це. Вибачте за це.
Кунтар

1

Я видав sudo chmod 700 ~/.sshі chmod 600 ~/.ssh/authorized_keysі chmod go-w $HOME $HOME/.sshзверху , і це фіксована моя проблема на коробці CentOS7 , що я зіпсував дозволу на при спробі отримати самби акції працюють. Дякую


1

Це здається проблемою з дозволом. Зазвичай це відбувається, якщо дозвіл деякого файлу / каталогу неправильно налаштований. У більшості випадків вони є ~/.sshі ~/.ssh/*. У моєму випадку вони є /home/xxx.

Ви можете змінити рівень журналу sshd, змінивши /etc/ssh/sshd_config(шукайте LogLevel, встановіть його DEBUG), а потім перевірте результат, /var/log/auth.logщоб побачити, що саме сталося.


3
Це виглядає по суті ідентично прийнятій відповіді і, мабуть, має бути коментарем до неї, а не відповіддю. З трохи більше представників ви зможете публікувати коментарі . До цього часу, будь ласка, не використовуйте відповіді як вирішення.
Натан Туггі

Вибачте, я думав, що це спосіб вирішити всі види цього питання. Тепер я знаю, як це зробити зараз, дякую.
Джої

1

Моєю проблемою була модифікована AuthorizedKeysFile, коли автоматизація заповнення / etc / ssh / pooblasti_keys ще не була запущена.

$sudo grep AuthorizedKeysFile /etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys
AuthorizedKeysFile  /etc/ssh/authorized_keys/%u

1

Просто подивіться на /var/log/auth.log на сервері . Встановлення додаткової багатослівності з -vv на стороні клієнта не допоможе, оскільки сервер навряд чи запропонує занадто багато інформації можливому зловмиснику.


1

Переконайтеся, що ви скопіювали весь відкритий ключ authorized_keys; ssh rsaпрефікс необхідний для ключа до роботи.


2
використано ssh-copy-id
vishnu

1

вам потрібно перевірити властивості файлів. призначити необхідне використання властивості:

$ chmod 600 ~/.ssh/sshKey
$ chmod 644 ~/.ssh/sshKey.pub

1

Подивіться /var/log/auth.logна сервер на наявність sshdавтентичних помилок.

Якщо все інше не вдається, запустіть sshdсервер у режимі налагодження:

sudo /usr/sbin/sshd -ddd -p 2200

Потім підключіться від клієнта:

ssh user@host -p 2200

У моєму випадку я знайшов розділ помилки наприкінці:

    debug1: userauth_pubkey: test whether pkalg/pkblob are acceptable for RSA SHA256:6bL+waAtghY5BOaY9i+pIX9wHJHvY4r/mOh2YaL9RvQ [preauth]
==> debug2: userauth_pubkey: disabled because of invalid user [preauth]
    debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa [preauth]
    debug3: userauth_finish: failure partial=0 next methods="publickey,password" [preauth]
    debug3: send packet: type 51 [preauth]
    debug3: receive packet: type 50 [preauth]

З цією інформацією я зрозумів, що моє sshd_configобмеження входу для членів sshгрупи. Наступна команда виправила цю помилку дозволу:

sudo usermod -a -G ssh NEW_USER

0

у цій примітці переконайтеся, що у sshd config є -;

PermitRootLogin without-password

встановіть вище, а потім перезавантажте sshd (/etc/init.d/sshd перезапуск)

вийдіть і спробуйте увійти знову!

за замовчуванням я вважаю -;

PermitRootLogin no

0

У моєму випадку це тому, що група користувача не встановлена ​​в AllowGroups конфігураційного файлу / etc / ssh / sshd_config. Після додавання все працює добре.


0

У мене домашній каталог у нестандартному місці та в sshdжурналах я маю цей рядок:

Could not open authorized keys '/data/home/user1/.ssh/authorized_keys': Permission denied

навіть якщо всі дозволи були просто чудовими (див. інші відповіді).

Я знайшов рішення тут: http://arstechnica.com/civis/viewtopic.php?p=25813191&sid=0876f069ec2aa5fdcd691a2e2e7242c2#p25813191

У моєму конкретному випадку:

  • додав новий рядок у /etc/selinux/targeted/contexts/files/file_contexts.homedirs:

    • це оригінальний рядок для звичайних домашніх каталогів:

      /home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0

    • це мій новий рядок:

      /data/home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0

  • Далі слід a restorecon -r /data/і sshdперезапуск


0

У мене була ця проблема, і жодна з інших відповідей не вирішила її, хоча, звичайно, інші відповіді є правильними.

У моєму випадку виявилося, що сам /rootкаталог (а не напр. /root/.ssh) Мав неправильні дозволи. Мені було потрібно:

chown root.root /root
chmod 700 /root

Звичайно, ці дозволи повинні бути чимось подібним (можливо chmod 770) незалежно. Однак це спеціально заважало sshdпрацювати, хоча /root/.sshі /root/.ssh/authorized_keysобидва мали правильні дозволи та власники.


0

У мене була ця проблема, коли я додав групу користувача для входу до іншого користувача. Скажімо, існує користувач ssh-login під назвою userA та користувач, який не використовується ssh-loginB. userA також має групу userA. Я змінив userB, щоб мати також групу userA. Приводять до описаної поведінки, так що користувачA не зміг увійти без підказок. Після того як я видалив групу userA з userB, вхід без підказки знову працював.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.