Como armazenar chaves SSH?

Como armazenar chaves SSH?

Comecei a usar chaves SSH em vez de senhas recentemente (graças ao GitHub, é claro), então lembre-se de que sou muito novo em todo esse conceito. Atualmente minhas chaves estão simplesmente em ~/.ssh, mas não tenho certeza se esta é uma boa prática. Por exemplo, se eu tiver várias máquinas, precisarei duplicar minhas chaves privadas, o que considero indesejável. Ou, se meu HDD falhar, perderei essas chaves, o que (eu acho) também é indesejável.

Então, quais são as práticas recomendadas para armazenar chaves SSH de forma segura, conveniente e confiável?

Parece que usar um cartão inteligente é uma opção (vejaCartões inteligentes para armazenar chaves gpg/ssh (Linux) - o que eu preciso?), este é o melhor?

Atualização: o motivo da pergunta foi que muitos serviços (como GitHub, AWS EC2) fornecem guias sobre como configurar chaves SSH para usar o serviço, mas pouco ou nenhum histórico (como o que fazer se você já tiver uma chave gerada por ssh-keygen[1], quais são as medidas de segurança recomendadas). E não está claro se essa informação não é de fato importante ou se espera que você a saiba “por padrão”.

Para resumir as respostas até este ponto(mas por favor leia-os, e se você tiver algo a acrescentar - por favor faça): parece que neste caso está tudo bem se você simplesmente deixar suas chaves privadas em ~/.ssh, contanto que você as mantenha longe de outras pessoas; mas certifique-se de ter outra maneira de acessar o serviço para fazer upload ou gerar uma nova chave caso perca uma (o que normalmente é o caso).

[1] GitHub usado para fornecerajuda sobre como gerenciar várias chaves.

Responder1

Por exemplo, se eu tiver várias máquinas, precisarei duplicar as chaves privadas, o que considero indesejável.

Não, na verdade você não sabe. Se você tiver várias máquinas, basta criar uma chave privada separada em cada uma. Para cada chave privada, basta carregar a chave pública correspondente no GitHub usando o mesmo processo.

Além disso, se meu HDD falhar, perderei minha chave privada, o que (eu acho) também é indesejável.

Na verdade; se você perder sua chave privada, basta gerar uma nova e fazer upload da chave pública correspondente.

Pelo que vale, você está certo ao dizer que duplicar uma chave privada é altamente indesejável. Idealmente, uma chave privada deve ser gerada em um arquivo ( ~/.ssh/id_rsapor exemplo) e devenuncadeixe esse arquivo - ou seja, ele nunca deve ser copiado, movido e, especialmente, não transferido através de uma rede. (por exemplo, eu os excluo dos backups) Devido à natureza dos protocolos de autenticação assimétricos, você só precisa se preocupar em manter sua chave privada fora do alcance de outras pessoas. Se você exagerar um pouco e perder o controle, geralmente não é grande coisa. (Isso não deve ser confundido com assimétricocriptografiachaves privadas, por exemplo, chaves GPG, que você provavelmente deseja manter.)

Responder2

Existe uma ferramenta muito boa chamada KeePass2 (http://keepass.info/) com a extensão (http://lechnology.com/software/keeagent/)

Você pode armazenar senhas, chaves SSH e muito mais (na página oficial do KeePass há extensões muito mais úteis).
Se quiser fazer login automaticamente com suas chaves SSH, você só precisa instalar PuTTY, Pageant e KeePass com KeeAgent. Se você estiver configurando corretamente, não será necessário configurar as chaves no PuTTY, Pageant ou FileZilla.

Eu mesmo uso e estou muito feliz com isso. Tenho mais de 30 VPS e servidor raiz com uma certa quantidade de chaves SSH diferentes e a única coisa que preciso fazer é abrir o KeePass (não é minha senha segura principal) e então só preciso digitar minha senha no console.

Responder3

Eu acrescentaria que ~/.ssh/ pode ser lido pelo seu navegador se você estiver usando a mesma conta de usuário para executar ambos.

Tente! Aponte seu navegador para o seuprivadochave em seu diretório inicial. É divertido.

Portanto, eu recomendaria armazenar chaves ssh no diretório inicial de outra conta de usuário.

uma palavra sobre senha de proteção de chaves

  • Hoje em dia, quebrar senhas não aleatórias é super rápido. Confiragato hash
    • (Embora senhas aleatórias e longas com mais de 12 caracteres ainda demorem razoavelmente para a força bruta)
    • Portanto, as chaves ssh criptografadas com AES são indecifráveis ​​no futuro próximo, desde que você use senhas longas e boas. Verrecomendações do github
  • Portanto, algum site pode adivinhar sua chave sem JavaScript. E então forçar a chave off-line com força bruta.
  • E os navegadores também podem examinar sua área de transferência com JS. Portanto, copiar e colar senhas muito longas também coloca você em risco de ataques de javascript mais sofisticados.

look_at_keys.html

 9 <HTML>
10 <HEAD>
11 <TITLE>look at keys</TITLE>
12 </HEAD>
13 <FRAMESET cols="20%, 80%">
14   <FRAMESET rows="100, 200">
15       <FRAME src="/Users/yourname/.ssh/stuff.pem">
16       <FRAME src="blah.html">
17   </FRAMESET>
18   <FRAME src="contents_of_frame3.html">
19 </FRAMESET>
20 </HTML>

Responder4

Você pode armazenar suas chaves ssh em um diretório separado dentro de uma partição criptografada. Então você pode usar ssh apontando para esse diretório com -i:

ssh -i identity_file [email protected]

Descrição completa ( man ssh):

-i arquivo_identidade

Seleciona um arquivo do qual é lida a identidade (chave privada) para autenticação de chave pública. O padrão é ~/.ssh/identity para a versão 1 do protocolo e ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 e ~/.ssh/id_rsa para a versão 2 do protocolo. também ser especificado por host no arquivo de configuração.
É possível ter múltiplas opções -i (e múltiplas identidades especificadas nos arquivos de configuração). Se nenhum certificado tiver sido especificado explicitamente pela diretiva CertificateFile, o ssh também tentará carregar as informações do certificado do nome do arquivo obtido anexando -cert.pub aos nomes dos arquivos de identidade.

Minha abordagem em relação à segurança é dividir as informações em privadas e gerais. Não quero criptografar toda a minha partição inicial, é por isso que copio arquivos secretos (como os de ~/.ssh) para uma partição criptografada.

Acho que isso oferece uma segurança bastante eficiente, porque o malware não encontrará nada em ~/.ssh e provavelmente não verificará todo o seu sistema ou perfis de shell para encontrar esse local.

-F configfile 

define o caminho para o arquivo de configuração.

PS: Eu criaria um alias alias ssh='ssh -i ... -F ...'e o colocaria no seu perfil.

PPS Ainda não verifiquei isso e não sei como outros programas (como o git) funcionarão com essas configurações de ssh.

informação relacionada