Где мои закрытые / открытые ключи SSH в UNIX?

17

Я начинаю понимать, как работают RSA и системы с открытым / закрытым ключом, и мне стало интересно, где хранится мой частный и открытый ключ SSH. Когда я захожу в свой домашний каталог и просматриваю свой каталог .ssh (cd .ssh), я вижу только файл "known_hosts", который, как мне кажется, содержит открытые ключи различных известных мне удаленных SSH-серверов.

Где я могу найти эти ключи? Я даже не помню, как их создавал, но поскольку я уже установил ssh-соединения, они должны быть где-то.

Я использую OpenSSH_5.2p1 с MAC OS 10.6.

Благодарность!

Майкл Эйлерс Смит
источник

Ответы:

15

~/.ssh/id_rsaи ~/id_rsa.pubобычно. Но это не значит, что ssh должен создать пару и сохранить их: ssh в основном использует протокол SSL, который устанавливает ключ сеанса, используя алгоритм обмена ключами Диффи / Хеллмана или какой-либо другой вариант. Это означает, что рукопожатие, устанавливающее соединение, генерирует ключ сеанса и отбрасывает его, когда сеанс завершен.

Читайте об алгоритме, он довольно изящен: используя довольно простую математику, он устанавливает ключ, известный обоим концам соединения, даже не отправляя ключ по соединению.

Чарли Мартин
источник
Означает ли это, что если меня никогда не просили сгенерировать ключи SSH, RSA никогда не использовался? Другими словами, что какой-то асимметричный алгоритм использовался для совместного использования ключа сеанса, но что временные открытый / закрытый ключи для соединения не были сохранены на моем компьютере?
Это точно верно. На самом деле, шифрование симметрично - асимметричные алгоритмы плохо подходят для потоковой передачи. Диффи-Хеллман используется для генерации сеансового ключа для симметричного шифрования. Если вместо этого вы используете пару открытый / закрытый ключ, они используются в другом рукопожатии для создания сеансового ключа для симметричного алгоритма.
Чарли Мартин
@mieli: Нет. Они никогда не создавались. publickeyтолько один из многих возможных методов аутентификации; если вы просто вошли в систему с помощью passwordили keyboard-interactive, сам пароль был отправлен. (Примечание: не путайте ключ пользователя, ключ хоста и ключи сеанса.)
user1686
@ Grawity Мы в основном согласны здесь, но давайте будем немного осторожнее. Обмен ключами Диффи-Хеллмана связан с RSA и другими алгоритмами асимметричного шифрования и является по существу асимметричным, поскольку обе стороны обмена имеют свою «половину» возможного соглашения. Они делают две части ключа, и в конечном итоге ключ и точный процесс , чтобы построить его отбрасываются в конце сессии. Однако они не являются публичной и частной частью пары RSA.
Чарли Мартин
4

Ваши личные и личные ключи ssh обычно хранятся в:

$HOME/.ssh/id_dsa     (private key)
$HOME/.ssh/id_dsa.pub (public key)

Или они могут быть, id_rsaи id_rsa.pubесли вы создали ключи RSA, а не ключи DSA (OpenSSH поддерживает обе формы).

Но тот факт, что вы установили ssh-соединения ранее, не означает, что у вас есть ssh-ключи. Если sshкоманда не может найти ваш личный ключ, она запросит пароль для удаленной системы. Это менее безопасно, чем использование ключей.

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

Кит Томпсон
источник
2

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

Трафик SSH2 шифруется с помощью симметричного сеансового ключа, установленного с использованием алгоритмов DH, ECDH или обмена ключами GSSAPI. Ни ключ хоста, ни ключ пользователя не используются для шифрования данных - их единственная цель - аутентификация .

Теперь помните, что SSH поддерживает несколько методов аутентификации: в дополнение publickey, почти все серверы принимают простой passwordи / или keyboard-interactive, в котором не происходит генерация или использование ключа - пароль просто отправляется на удаленный сервер для проверки.

Другими словами, «поскольку я уже установил ssh-соединения ранее, они должны быть где-то» неверно - пара ключей пользователя не нужна для установления соединений.


Если вы сделали создать пару ключей, скорее всего он будет в ~/.ssh/id_*- например, id_rsaдля RSA пары ключей по умолчанию, id_ecdsaдля ECDSA, id_dsaдля АССА. Хотя эти файлы содержат как частную, так и открытую части пары ключей, открытая часть обычно автоматически извлекается в отдельный id_*.pubфайл для удобства ( id_rsa.pubдля id_rsaи так далее).

user1686
источник