Мой мозг крутится вокруг оси открытых и закрытых ключей. Когда вы создаете облачный сервер (экземпляр) в сервисе Amazon EC2, а затем хотите подключиться к нему через SSH, Amazon требует, чтобы вы загрузили закрытый ключ для установления соединения. Разве идея открытого / закрытого ключа не предполагает, что Amazon должен требовать от вас загрузки открытого ключа?
Кроме того, если я настраиваю сервер SFTP для использования клиентом, должен ли я устанавливать его ключ на сервере или давать ему ключ с сервера? В любом случае, это должен быть открытый или закрытый ключ?
Если подумать более глубоко о процессе аутентификации, что нужно держать в секрете? Amazon знает публичную половину ключа, и кто-нибудь может знать половину публики. Открытая половина пары ключей при сопоставлении с частной половиной означает, что частная половина использовалась для аутентификации.
Ваш закрытый ключ, который предоставляется вам, когда Amazon создает для вас пару ключей, полезен только в том случае, если он есть только у вас. Если это не секрет, то любой, кто знает это, может также аутентифицироваться для любого, кто владеет публичной половиной пары ключей.
Кто бы ни был аутентифицируется должен держать частный половина. Это нормально, если все в мире могут аутентифицировать вас, удерживая открытую половину ключа, но только вы должны контролировать частную половину.
Amazon предоставляет услуги генерации ключей, потому что некоторые операционные системы (кашель, Windows, кашель) могут не облегчить создание пар ключей SSH.
При использовании SSH (и SFTP) открытый ключ устанавливается в файл authorized_keys пользователя при запуске экземпляра EC2. Закрытый ключ хранится только у пользователя и предоставляется для аутентификации на сервере.
Из документации по адресу:
http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html
похоже, что Amazon генерирует пару ключей на своих серверах и отправляет вам закрытый ключ через HTTPS. Возможно, это далеко не идеально (в идеале, закрытый ключ будет у вас и у кого-либо еще), но, вероятно, не так уж и ужасно, учитывая, что все это происходит в контексте вашего аутентифицированного сеанса, и только вы (и Amazon временно) видите закрытый ключ. Вы также всегда можете сгенерировать и загрузить свой собственный открытый ключ для использования в EC2, сохраняя при этом строго закрытый ключ.
Чтобы настроить пользователей SFTP для аутентификации ключей, они должны генерировать ключи SSH на своих машинах. После создания пары ключей они должны отправлять вам только открытый ключ для установки в соответствующем файле authorized_keys. Закрытый ключ, как следует из названия, является частным.
Аутентификация с открытым ключом работает в обратном направлении, чем вы, вероятно, думаете. Открытый ключ шифрует сообщения, а закрытый ключ расшифровывает их. Сервер хранит открытый ключ владельца учетной записи и использует его для шифрования сообщения. Только владелец закрытого ключа может расшифровать это сообщение.
Если вы отправляете кому-то секрет, зашифрованный его открытым ключом, если он может сказать вам, что это за секрет, значит, вы знаете, что у него есть соответствующий закрытый ключ. Затем пользователь аутентифицируется.
AWS требует, чтобы вы загрузили и сохранили свой закрытый ключ, потому что они не будут хранить его по соображениям безопасности. Поскольку закрытый ключ нигде в AWS не хранится, вы можете быть уверены, что ваш экземпляр EC2 безопасен.
В каком-то смысле это не имеет значения. Пара закрытый / открытый ключ состоит из двух частей, и какая из них будет открытой, зависит от вас. Если что-то зашифровано одним ключом, вам понадобится другой для его расшифровки. Если вы опубликовали один ключ публично, а другой нет, то закрытый ключ - это тот, который вы не публиковали.
Переходя к вашему актуальному вопросу: предположительно, Amazon дает вам возможность управлять своими собственными ресурсами, поэтому их нельзя передавать другим людям. В этом контексте вы должны доверять Amazon, чтобы иметь ваш закрытый ключ, по крайней мере, на время, достаточное для настройки.
Если вы хотите, чтобы ваш клиент вошел в систему таким образом, вам нужно, чтобы он дал вам ключ, которым они готовы поделиться с вами, следовательно, их открытый ключ. Вы устанавливаете это на сервере в authorized_keys, что фактически означает, что «любой, у кого есть закрытый ключ, соответствующий этому общедоступному, может получить доступ к этому ресурсу».