Onde estão minhas chaves SSH públicas / privadas no UNIX?

16

Estou começando a entender como o RSA e os sistemas de chave pública / privada funcionam e fiquei imaginando onde minha chave SSH pública e privada é armazenada. Quando vou ao meu diretório pessoal e navego no diretório .ssh (cd .ssh), vejo apenas o arquivo "known_hosts", que, suponho, contém as chaves públicas de diferentes servidores SSH remotos que conheço.

Onde posso encontrar essas chaves? Nem me lembro de criá-los a propósito, mas desde que eu já estabeleci conexões ssh antes, elas devem estar em algum lugar.

Estou usando o OpenSSH_5.2p1 com o MAC OS 10.6.

Obrigado!

Michael Eilers Smith
fonte

Respostas:

14

~/.ssh/id_rsae ~/id_rsa.pubgeralmente Mas não se segue que o ssh deve criar um par e salvá-lo: o ssh basicamente usa o protocolo SSL, que estabelece uma chave de sessão usando o algoritmo de troca de chaves Diffie / Hellman ou alguma variante. Isso significa que o handshake que configura a conexão gera uma chave de sessão e a descarta quando a sessão é concluída.

Leia o algoritmo, é bem bacana: usando uma matemática bastante simples, ele estabelece uma chave conhecida para ambas as extremidades da conexão sem nunca enviar a chave pela conexão.

Charlie Martin
fonte
Isso significa que, se nunca me pedissem para gerar chaves SSH, o RSA nunca seria usado? Em outras palavras, que algum algoritmo assimétrico foi usado para compartilhar a chave da sessão, mas que as chaves públicas / privadas temporárias para conexão não foram armazenadas no meu computador?
Isso é exatamente correto. Na verdade, a criptografia é simétrica - algoritmos assimétricos não são adequados para streaming. O Diffie-Hellman é usado para gerar uma chave de sessão para a criptografia simétrica. Se você usar um par de chaves pública / privada, elas serão usadas em algum outro handshake para criar uma chave de sessão para o algoritmo simétrico.
Charlie Martin
@mieli: Não. Eles nunca foram criados em primeiro lugar. publickeyé apenas um método de autenticação possível para muitos; se você simplesmente efetuou login usando passwordou keyboard-interactive, a própria senha foi enviada. (Nota: Não confunda a chave do usuário, a chave do host e as chaves da sessão.)
user1686
@ grrawity estamos concordando principalmente aqui, mas tenhamos um pouco de cuidado. A troca de chaves Diffie-Hellman está relacionada ao RSA e a outros algoritmos de criptografia assimétrica e é essencialmente assimétrica, pois os dois lados da troca têm sua própria "metade" do eventual acordo. Eles fazem tem duas partes da chave, ea eventual chave e o processo exato para construí-lo são descartados no final da sessão. No entanto, eles não são as partes públicas e privadas de um par RSA.
Charlie Martin
4

Suas chaves ssh públicas e privadas pessoais são normalmente armazenadas em:

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

Ou poderiam ser id_rsae id_rsa.pubse você criou chaves RSA em vez de chaves DSA (o OpenSSH suporta os dois formulários).

Mas o fato de você ter estabelecido conexões ssh antes não implica que você tenha chaves ssh. Se o sshcomando não conseguir encontrar sua chave pessoal, ele solicitará uma senha para o sistema remoto. Isso é menos seguro do que usar chaves.

Você normalmente deve criar sua chave privada ssh com uma senha. Se você criá-lo sem uma senha, alguém que obtenha uma cópia da sua chave privada poderá se passar por você. ssh-agentpermite que você use uma chave com uma frase secreta sem ter que redigitar sua senha sempre que a usar.

Keith Thompson
fonte
2

Se você não criou um par de chaves, provavelmente não possui um.

O tráfego SSH2 é criptografado com uma chave de sessão simétrica estabelecida usando os algoritmos DH, ECDH ou troca de chaves GSSAPI. Nem a chave do host nem a chave do usuário são usadas para criptografar dados - seu único objetivo é a autenticação .

Agora lembre-se de que o SSH suporta vários métodos de autenticação: além disso publickey, quase todos os servidores aceitam o simples passworde / ou keyboard-interactive, no qual não ocorre geração ou uso de chave - a senha é simplesmente enviada ao servidor remoto para verificação.

Em outras palavras, "desde que eu já estabeleci conexões ssh antes, elas devem estar em algum lugar" está incorreto - o par de chaves do usuário não é necessário para estabelecer conexões.


Se você fez criar um par de chaves, ele provavelmente vai ser em ~/.ssh/id_*- por exemplo, id_rsapara o par de chaves RSA padrão, id_ecdsapara ECDSA, id_dsapara DSA. Embora esses arquivos contenham partes privada e pública do par de chaves, a parte pública geralmente é extraída automaticamente em um id_*.pubarquivo separado por conveniência ( id_rsa.pubpara id_rsaassim por diante).

user1686
fonte