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

1495
user3178622

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

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

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

  • Как A «дает» B свой открытый ключ ( id_rsa.pub)? Это должен быть ручной процесс, или это может быть автоматизировано? Если руководство, каков процесс? Если это автоматизировано, какая команда? Когда B «получает» этот открытый ключ, куда он идет или хранится?
  • При инициализации SSH-соединения с B, как A «использует» свой закрытый ключ ( id_rsa) как часть этого соединения?
11
Почему объяснение без ответа? Это показывает исследования, является [SSCCE] (http://sscce.org), и, насколько мне известно, не является дубликатом. ** Если вы не согласны и считаете, что это дубликат, укажите ссылку на вопрос, который, по вашему мнению, является дубликатом! ** user3178622 8 лет назад 3
Хотя я не отрицал и не думаю, что этот вопрос в любом случае плох, возможно, [Информационная безопасность] (http://security.stackexchange.com/) Стек будет более подходящим местом. MC10 8 лет назад 0
Я тоже не голосовал против, но я понимаю, почему кто-то сделал. Это широко используемый метод входа в систему, хотя я согласен с тем, что результаты поиска Google загромождены тем, как заставить его работать, а не тем, как работают статьи. Возможно найти информацию, которую вы ищете. Tyson 8 лет назад 3
@ MC10 нет, это не для информационной безопасности, это на самом деле не связано с безопасностью barlop 8 лет назад 0
Понятие SSCCE не совсем применимо к вопросам, которые не касаются кода. Scott 8 лет назад 5
Не дубликат, а связанный: https://superuser.com/questions/383732/how-does-ssh-encryption-work. Мог бы ответить на вторую часть вопроса (как используются закрытые ключи) Jay 8 лет назад 2
@Scott SSCCE может быть применим ко многим вопросам людей, даже если не код. Многие люди описывают проблемы с компьютером со всеми видами ненужного мусора, такого как «компьютер моего брата»: «Я только что вернулся из отпуска, и это случилось». Менее нелепо, они могут утверждать, что они находятся в виртуальной машине - когда это не имеет значения. barlop 8 лет назад 0
@ barlop: я понимаю, что есть хорошие вопросы и плохие вопросы (со спектром серого между), и я признаю, что атрибуты ** S **, ** SC ** & ** C ** являются одними из различий. Но у меня проблемы с глотанием ** E **. «Есть две машины Linux, A и B» - это как «три речевых формы жизни, которые входят в заведение, где подают опьяняющие напитки» - они не * Примеры, * они являются общими сценариями. Для ясности: у меня нет проблем с * вопросом *, но комментарий о том, что это "SSCCE", все равно что сказать, что он бесцветный и зеленый. Scott 8 лет назад 0
@ Скотт технически, C и E не применяются, потому что они указывают код. (хотя его Short также указывает код чуть менее заметно). Но C и E все еще непосредственно применяются. Смысл в том, правильно ли, наш разум разбирает то, что он написал, и говорит «да», это имеет смысл. Он компилируется ... и E, хорошо разговорный, E - пример, включает в себя общий сценарий, и универсальный сценарий является прекрасным примером, потому что он короткий. Так что, как вы соглашаетесь с C (правильно, компилирует), он компилируется в наших умах, так и E, например, пример отлично подходит для человеческого разума. barlop 8 лет назад 0
@ Скотт, хотя и предоставляется, с кодом, S и SC C и E обычно включают код. Но нет сомнений, что дать пример - это то, что относится и к задаче, не связанной с кодом. (и иногда полностью компилируемый пример не нужен .. как здесь, он мог бы попытаться разбить его на примеры командной строки, но в этом не было необходимости. Если его английский был плохим, и он мог говорить только на командной строке - что он бегает, что он ожидает, что он получает, тогда это было бы необходимо). barlop 8 лет назад 0

2 ответа на вопрос

5
BamaPookie

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

Есть две машины 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! Пожалуйста, смотрите мои вопросы под ответом BamaPookie; У меня к тебе такие же вопросы! user3178622 8 лет назад 0

Похожие вопросы