4

Как настроить ssh, основанный на ключе («без пароля») клиент для входа на Linux/MacOSX sshd сервер через клиентов Windows, Linux или MacOSX?

[В поисках как базового, концептуального понимания основанных на ключах логинов ssh/sshd, так и рабочего примера настройки для всех вышеупомянутых операционных систем.]

1 ответ1

3

Предпочитаю:

  1. Обсудите краткие основы концепции шифрования ключей (пытаясь раскрыть магию)
  2. Примените упомянутые концепции к входу через сеть (аутентификация)
  3. Предоставьте подробный, рабочий пример / процедуру.

1: Базовое шифрование, концепции аутентификации

Открытый ключ генерирует зашифрованные данные, которые может расшифровать только личный ключ. Не имеет значения, что это за данные. [Может быть простой текстовый файл ... или какая-то система аутентификации по запросу-ответу (подробности ниже) ... это всего лишь механизм шифрования-дешифрования.] Например, somone может шифровать содержимое электронной почты с помощью открытого ключа "Джонни Юты", и результирующий зашифрованный вывод, который может быть расшифрован только с помощью закрытого ключа Джонни Юты. Поэтому важно, чтобы указанный закрытый ключ хранился в безопасном месте (предпочтительно не путешествуя по сети), чтобы поддерживать "безопасную и приватную" связь.

2: Применение указанных концепций для включения входа без пароля

Вход в систему без пароля часто включается с помощью системы аутентификации по запросу. Система "войти в систему" (назовите ее MachineA) предлагает "вопрос" (возможно, просто случайная строка), шифрует указанный вопрос с помощью открытого ключа, связанного с «машиной, которая хочет войти (назовите ее MachineX). " MachineX расшифровывает указанный вопрос и передает расшифрованный вопрос обратно как "ответ", который должен быть подтвержден MachineA. После проверки MachineA предоставляет логин MachineX (для MachineA).

Все это предполагает, что MachineA имеет открытый ключ MachineX (в системах Linux, как правило, хранящийся в ~/.ssh/authorized_keys учетной записи, "входящей в систему") до того, как произойдет вышеуказанный обмен. Вот почему требуется копия указанного открытого ключа в файле MachineA:~/.ssh/authorized_keys . Этот файл теоретически может также называться ~/.ssh/authorized__public__keys ... и может активно избегать путаницы среди многих пользователей, если он будет назван таковым ... но предполагается, что "распределенные" ключи являются открытыми ключами, и поэтому мы подозреваем, что дизайнеры полагали, что "публичное" прилагательное может быть излишним.

3: Подробный, рабочий пример / процедура

(Предисловие: Предполагается, что сервер / машина для входа в систему имеет запущенный демон sshd . Кроме того, альтернативный пример / процедура / примечания можно найти в ответе на вопрос «Как настроить SSH, чтобы мне не приходилось вводить свой пароль?»", но это не распространяется на клиентов Windows, между прочим.)

Создайте пару ключей для процесса входа в систему на стороне клиента (ssh). В Windows рассмотрите возможность использования PuTTYgen и создайте новую пару ключей, включая открытый ключ (конечно). Для Linux/MacOSX рекомендуем ssh-keygen (1). Посмотрите этот пример сеанса создания пары ключей, запущенного в Unbuntu (Linux) 11.04:

joeschmo@MachineX:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/joeschmo/.ssh/id_rsa): 
Created directory '/home/joeschmo/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/joeschmo/.ssh/id_rsa.
Your public key has been saved in /home/joeschmo/.ssh/id_rsa.pub.
The key fingerprint is:
e8:36:69:c5:9a:d2:e3:e0:53:f3:34:d4:d0:a2:8a:80 joeschmo@MachineX
The key's randomart image is:
[... <output truncated by author to save space> ...]
joeschmo@MachineX:~$ ls -la .ssh
total 16
drwx------ 2 joeschmo joeschmo 4096 Oct 20 12:26 .
drwxr-xr-x 3 joeschmo joeschmo 4096 Oct 20 12:26 ..
-rw------- 1 joeschmo joeschmo 1679 Oct 20 12:26 id_rsa
-rw-r--r-- 1 joeschmo joeschmo  408 Oct 20 12:26 id_rsa.pub
joeschmo@MachineX:~$ cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp8nle6B68HgVQoQ8hCyQI9yKjsKnThRS0FjWsOwXId8Mc6i9E3zM0ByxBeneIFP8O42dwYmM9zwWrpP8zvpSbo0J2qIfhm+kZibClJnIIY8nVJt5AbXGdoQHOnxKOJUqP9EZgOgMqEjBNB3IVi7jPw2AXcMeZb1SCCbwsLWXzueECJP7Z4oJTU5+hD0grFMaWNhSszdpSD2Xo1hWi2fPdBu/cRMV4LTD3L7pOI57HeXS2mcLoznQohV7OV4RvDgRS9hhHi1A5/bzg9zRHJBISB0sxnwjmfz/kTaljBVZ8xtM9LenkmQYyj6B+0P+BFDAxzHIJKNOrf+i92fuLktoP joeschmo@MachineX
joeschmo@MachineX:~$ 

В приведенном выше Linux-примере файл /home/joeschmo/.ssh/id_rsa содержит закрытый ключ (это просто текст), а /home/joeschmo/.ssh/id_rsa.pub содержит открытый ключ (это также просто текст). Я также не вводил парольную фразу в приведенном выше примере, просто вводя "return" для "no passphrase".

[Примечание автора: никогда ранее не использовала парольную фразу для открытого ключа, но при этом необходимо повторно вводить парольную фразу для "доступа" к открытому ключу ... предположительно, парольная фраза шифрует открытый ключ, но я Точно сказать не могу. Если указанную парольную фразу необходимо вводить каждый раз, то такой тип игнорирует цель входа без пароля. Может быть, это единовременная запись? Домашнее задание на потом, возможно ...]

Все вышеуказанные процедуры представляют на сторону клиента (машина «войти в системе из») процедур. Теперь перейдем к настройке на стороне сервера (машина для входа в систему).

Вам нужно будет добавить содержимое id_rsa.pub в файл ~/.ssh/authorized_keys машин, предоставляющих логин без пароля от joeschmo@MachineX . (ПРИМЕЧАНИЕ. Обязательно отключите права доступа 'group' и 'other/world' для ~/.ssh/authorized_keys , othwerise sshd обычно не читает указанный файл, предположительно потому, что он считается "небезопасным"). ПРИМЕЧАНИЕ: ssh-copy-id автоматизирует / упрощает эту процедуру.

Вот и все. Если вы хотите входить без пароля только с одного компьютера на другой, все готово.

Но ... в целом ...

Сохраните закрытый ключ на одной машине (таким образом, идентифицируя упомянутую машину - давайте назовем ее "MachineX") и скопируйте часть открытого ключа пары на каждую машину, которая предоставит логин для MachineX. Таким образом, все машины A, B, C помещают копию открытого ключа MachineX в соответствующий файл ~/.ssh/authorized_key чтобы MachineX мог подключиться к компьютерам A, B и C. (Кроме того, вы можете записать много других открытых ключей ... из РАЗНЫХ пар ключей в соответствующих машинах A, B и C ~/.ssh/authorized_keys чтобы разрешить вход в систему с машин, отличных от MachineX.) Например:

Machine X pub key  --- copied to ~/.ssh/authorized_keys at -->  Machine A
Machine X pub key  --- copied to ~/.ssh/authorized_keys at -->  Machine B
Machine X pub key  --- copied to ~/.ssh/authorized_keys at -->  Machine C

Вышеуказанное позволяет войти в систему с MachineX для входа в любой из A, B или C без ввода пароля.

В качестве альтернативы:

Machine Y pub key  --- copied to ~/.ssh/authorized_keys at -->  Machine A
Machine Y pub key  --- copied to ~/.ssh/authorized_keys at -->  Machine B
Machine Y pub key  --- copied to ~/.ssh/authorized_keys at -->  Machine C

Вышеприведенное позволяет войти в систему от MachineY для входа в любой из A, B или C без ввода пароля.

Таким образом .... когда все вышеперечисленное "применяется" .... Все машины A, B и C имеют копию открытого ключа X и Y в A, B и C ~/.ssh/authorized_keys .

Также обратите внимание, что каждая пара ключей pub/priv обычно связана с определенной учетной записью на компьютере (в указанных выше случаях машины X и Y). например, johnnyutahh @ MachineX, папа @ MachineY и т. д.

В любом случае закрытый ключ в паре ключ pub/priv живет только на одной машине (если вы "делаете все правильно") и никогда не переносится по сети. Таким образом, это личное. Таким образом, это "безопасно". И наоборот, открытый ключ бросается туда-сюда по ветру и копируется повсюду.

В приведенном ниже примере файла ~/.ssh/authorized_keys есть открытые ключи от моего johnnyutahh@my-laptop , root@site1.com , root@hypothetical-site2.com , joeschmo@MachineX (из примера ssh-keygen выше) и могут содержать другие. Обратите внимание, что эти "адреса" в конце каждой строки являются просто комментариями; это просто произвольный текст, чтобы помочь человеку понять, какой ключ есть, и который фактически не используется какой-либо из автоматизированных систем / программ для каких-либо действий.

root@MachineA Oct 20 02:20:12 ~# cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyTNCV7NUBssxobBZqWormtzcUmICSeGPTSp1i48FVIAebvpgAv7Pb3lFG3vFP8e88w9zGjFnZ6GzTQEwQaTL9YJ/Q9zOvAuxjb8chJz86j9Pg+S8ic4G34c2Og8UoNbTDWYOAZaP/axpoC9W81bh0tjldPnGQuifm9ELHXMXjfGq9QazyPqOcgNG6QL7cl8TYGoj4yJxRwoSytYG65l0/bCFX8JubkFdbWDXNY4tFEfollFIlm10xzQIfz6S6I80Bu0XesFvCjgfLwiLdt+8nT7U9Tawwq8jBc1U0yisQzkSJ9UwXYcKkYX2SJMQ8Ld3Nn82wsisXcEn+Zpe3A6Usw== johnnyutahh@my-laptop
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0zPre+WkOlNgc4KzFRxGj2Y5UwG0gW+kI2LjvgwNYZLHGQqQ0GQGkmg5rulSbyx3WPo1KNCiaqafQ8fWFmXIgKreGWMwEOehnKLyXLhhxvzpYDgJhI1QbwgInLjUCj8krvsdj9fCLY6sFTYFCXLKUptJGbXThcB170kFhJCUlR33H4WfWn4NWzwpmma4HsVDR7F7eUmJE8FD+6AG4Uw9bljDaUS++XghAZ5oXUofGx7FE2vcQKdNAMF5jYIN/XbL4cj4HuJUonqYgyxCX2JpvJePEwMBW1qQffAjgtgs85217OFmfLIVL6rB3RHh1mmIHSVLtOhAZo1okg708scPCw== root@site1.com
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC84JdXtzFhQgcFj7/1pz+li2qzZSThJalddkUubuvI71i/Bk7fJ5uI8CCQDPvzr1P+HGaY//RxBG0S2jINXk4LEE1mA3Ogyo+r2ykMaqcNa2JJycHs0sdczZhZR0OOxf5KGz8hhy5W1cdhca6q0AcHmbj+KWz5N0U1qlLptMD4C45QgxtUjFYPWM7r9bDdt6kTo9J39LP4w3S1GTM9uDC8V5NUZX+lFZMap+Tch/YcEiPxAm4VaTM7CGXly+w5XpjlEVUNEb5xu51dOoOXbjueD5Vl3wdPwC6A511v2k9mD/1F4GXjRDzlelKiu4TJ9mVAI2J9+UC0iMUyYj52RO53 root@hypothetical-site2.com
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp8nle6B68HgVQoQ8hCyQI9yKjsKnThRS0FjWsOwXId8Mc6i9E3zM0ByxBeneIFP8O42dwYmM9zwWrpP8zvpSbo0J2qIfhm+kZibClJnIIY8nVJt5AbXGdoQHOnxKOJUqP9EZgOgMqEjBNB3IVi7jPw2AXcMeZb1SCCbwsLWXzueECJP7Z4oJTU5+hD0grFMaWNhSszdpSD2Xo1hWi2fPdBu/cRMV4LTD3L7pOI57HeXS2mcLoznQohV7OV4RvDgRS9hhHi1A5/bzg9zRHJBISB0sxnwjmfz/kTaljBVZ8xtM9LenkmQYyj6B+0P+BFDAxzHIJKNOrf+i92fuLktoP joeschmo@MachineX
root@MachineA Oct 20 02:20:19 ~#

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