Как сгенерировать клиентский ssh-ключ при каждом подключении? - PullRequest
0 голосов
/ 30 сентября 2011

Пока, я думаю, что открытый ключ, который используется на стороне клиента, используется повторно несколько раз (возможно, до тех пор, пока конфигурация не изменится, я думаю).Я предполагаю, что мы используем метод пароля.

Это меня беспокоит.Я бы предпочел, чтобы мой ssh-клиент автоматически генерировал ключ RSA для каждого соединения (но ключ на стороне клиента ДОЛЖЕН оставаться тем же самым, чтобы гарантировать подлинность и

Возможно ли это?

Спасибо.

РЕДАКТИРОВАТЬ: Пожалуйста, смотрите комментарий № 3.

Ответы [ 3 ]

2 голосов
/ 01 октября 2011

Открытый ключ в SSH используется для идентификации клиента. Закрытый ключ используется для доказательства того, что пользователь не является самозванцем.

Сервер знает только открытый ключ. Если вы меняете его для каждого соединения, это похоже на изменение имени пользователя для каждого соединения. Итак, сервер знает пользователя «Джон», но затем вы говорите «Я Джо». Неважно, докажете ли вы, что вы Джо, сервер вас не знает, поэтому он вас не пропустит.

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

1 голос
/ 01 октября 2011

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

Когда начинается сеанс SSH, каждая сторона использует это свойство для аутентификации другой. Во время рукопожатия секрет (технически он называется «nonce» и в основном это случайное число) шифруется открытым ключом получателя, а затем подписывается закрытым ключом отправителя. Когда это получено, получатель а) может проверить подпись с открытым ключом отправителя; и б) единственный, кто может расшифровать сообщение. Это подтверждает подлинность обмена. Если это рукопожатие происходит в обоих направлениях, обе стороны могут проверить друг друга. Это называется взаимной аутентификацией.

Таким образом, важен не ключ ключа, а криптографический принцип, связывающий открытый и закрытый ключи. Этот процесс обеспечивает возможность создания случайного сеансового ключа и безопасного его обмена с использованием пар открытого и закрытого ключей и является сердцем того, как SSH (или SSL или TLS в этом отношении) запускает сеанс.

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

0 голосов
/ 04 октября 2011

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

Похоже, у вас глубокие заблуждения относительно протокола SSH. Я могу только предложить прочитать RFC 4252, чтобы уточнить вещи.

...