Как публичные ключи «отправляются» на серверы и как закрытые ключи «используются» для SSH?

11

Есть две машины Linux, скрипты А и В. работает на необходимость , чтобы иметь возможность SSH в B. Таким образом, генерирует открытый ключ (вероятно ssh-keygen-порождённых id_rsa.pub), а затем использует соответствующий закрытый ключ (опять же , возможно id_rsa) , чтобы сделать это соединение SSH.

Если что-то, что я сказал выше, неверно или введено в заблуждение, пожалуйста, начните исправлять меня!

Предполагая, что я более или менее на цели:

  • Как A «дает» B свой открытый ключ ( id_rsa.pub)? Это должен быть ручной процесс, или это может быть автоматизировано? Если руководство, каков процесс? Если это автоматизировано, какая команда? Когда B «получает» этот открытый ключ, куда он попадает или хранится?
  • При инициализации SSH-соединения с B, как A «использует» свой закрытый ключ ( id_rsa) как часть этого соединения?
user3178622
источник
3
Почему объяснение без ответа? Это показывает исследования, это SSCCE , и, насколько мне известно, не является дубликатом. Если вы не согласны и считаете, что это дубликат, укажите ссылку на вопрос, который, по вашему мнению, является дубликатом!
user3178622
Хотя я не отрицал и не думаю, что этот вопрос в любом случае плох, возможно, стек информационной безопасности был бы более подходящим местом.
MC10
3
Я тоже не голосовал против, но я понимаю, почему кто-то сделал. Это широко используемый метод входа в систему, хотя я согласен с тем, что результаты поиска Google загромождены тем, как заставить его работать, а не тем, как работают статьи. Возможно найти информацию, которую вы ищете.
Тайсон
5
Понятие SSCCE не совсем применимо к вопросам, которые не касаются кода.
Скотт
2
Не дубликат, но связанный: superuser.com/questions/383732/how-does-ssh-encryption-work . Мог бы ответить на вторую часть вопроса (как используются закрытые ключи)
Jay

Ответы:

5

ssh-keygenгенерирует как открытый, так и закрытый ключи, которые изначально находятся только локально. Передача открытого ключа другому хосту - это то, что пользователь должен будет сделать вручную, отправив его кому-то, ответственному за сервер B, или, если у вас есть учетная запись с паролем, вы можете войти в систему и поместить ее туда самостоятельно. Чтобы разрешить вход без пароля на сервер B, вам необходимо добавить свой открытый ключ в файл ~ / .ssh / authorized_keys на сервере B (один открытый ключ на строку, в этом файле может быть любое количество ключей). Существует команда linux ssh-copy-id, которая скопирует для вас идентификатор и поместит его в файл.

По умолчанию ssh будет использовать файл ~ / .ssh / id_XXX в качестве вашего закрытого ключа. XXX может быть rsa, dsa или любым протоколом, для которого был сгенерирован ключ. IIRC, dsa старая и не должна использоваться. Если вы хотите использовать другой закрытый ключ, вы можете указать его в своей команде ssh, используя -i. Если используемый закрытый ключ совпадает с открытым ключом на удаленном компьютере (в файле author_keys для учетной записи пользователя, в которую вы входите), вам не нужно будет вводить пароль.

BamaPookie
источник
Спасибо @BamaPookie - несколько повторений: (1) когда запускается ssh-keygen, вы упоминаете, что эти два ключа «находятся только локально»? Где?!? Как, в какой папке я могу перейти и увидеть id_rsa.pubи id_rsa? (2) Я думал, что это ssh-addбыла команда для добавления открытого ключа authorized_keys, нет? Какая разница между ssh-copy-idа ssh-add? Еще раз спасибо!
user3178622
2
@ user3178622 '1' У меня его нет передо мной, но похоже, что ~/.ssh/id_rsa '2', ssh-add - не для добавления в author_keys, а для добавления в цепочку для ключей .. Я не использовал ssh хотя ssh-add позволяет вам не вводить ключевую фразу каждый раз, когда вы используете клавишу, для которой требуется ключевая фраза. Так что, если ваши ssh-ключи не требуют ключевой фразы, тогда, я думаю, нет никакой причины использовать ssh-add, и я думаю, вам все равно нужно будет использовать ssh-copy-id или выполнить ручное копирование открытого ключа в авторизованные
ключи
2
ssh-keygen спросит вас, где сохранить файл, но расположение по умолчанию в ~ / .ssh / ssh-copy-id копирует открытый ключ на удаленный хост. ssh-add добавляет закрытый ключ в ваш локальный брелок. Добавление закрытого ключа в ваш локальный набор ключей означает, что он будет проверен по умолчанию при попытке подключения через ssh (то есть без указания его с помощью -i).
BamaPookie
1
@BamaPookie Где вы пишете: «Добавление закрытого ключа в ваш локальный набор ключей означает, что он будет проверен по умолчанию при попытке соединения ssh (то есть без указания его с -i)». <--- Стоит уточнить, что Я думаю, вы имеете в виду, что он меняет выбранный закрытый ключ по умолчанию, так что вместо id_rsa он из набора ключей. (Конечно, без ssh-add вам по-прежнему не нужно указывать закрытый ключ с -i, он все равно будет иметь значение по умолчанию, просто другое значение по умолчанию).
Barlop
3

Есть две машины Linux, A и B. Сценарии, работающие на A, должны иметь возможность SSH подключаться к B. Таким образом, A генерирует открытый ключ (вероятно, сгенерированный ssh-keygen id_rsa.pub), а затем использует свой соответствующий закрытый ключ ( снова, вероятно, id_rsa), чтобы сделать это соединение SSH.

Если что-то, что я сказал выше, неверно или введено в заблуждение, пожалуйста, начните исправлять меня!

Предполагая, что я более или менее на цели:

Да

но B необходимо, чтобы открытый ключ A был указан в файле author_keys B, чтобы A мог подключиться к B

также вы можете удалить id_rsa.pub и ssh в B, и он все равно будет работать, потому что открытый ключ генерируется заново при каждом подключении ssh и не сохраняется ни в одном id_rsa.pub.

Как A «дает» B свой открытый ключ (id_rsa.pub)? Это должен быть ручной процесс, или это может быть автоматизировано? Если руководство, каков процесс? Если это автоматизировано, какая команда?

инструкция - что-то вроде

из-

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

или даже больше вручную, чтобы сломать команду

A $ cat id_rsa.pub | ssh user@host 'cat>~/a.a'

затем на B убедитесь, что ~ / .ssh существует, затем выполните cat a.a >> ~/.ssh/authorized_keys

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

Или вы можете отправить id_rsa.pub по электронной почте на учетную запись электронной почты, затем из B, B можете проверить электронную почту и добавить содержимое id_rsa.pub в свой файл author_keys.

автоматически

Команда ssh-copy-id

Вы должны быть в состоянии SSH, поэтому вам нужен доступ с паролем

Вместо того, чтобы делать ssh user @ host, вы делаете ssh-copy-id user @ host, и вам предлагается ввести пароль, вы вводите его, вы находитесь, он скопирует открытый ключ. И в следующий раз, когда вы сделаете ssh user @ host, он будет использовать ключ.

Когда B «получает» этот открытый ключ, куда он попадает или хранится?

B's ~ / .ssh / authorized_keys

При инициализации SSH-соединения с B, как A «использует» свой закрытый ключ (id_rsa) как часть этого соединения?

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

barlop
источник
Спасибо @ barlop! Пожалуйста, смотрите мои вопросы под ответом BamaPookie; У меня к тебе такие же вопросы!
user3178622