Como posso adicionar uma chave de host ao known_hosts
arquivo SSH com segurança?
Estou configurando uma máquina de desenvolvimento e quero (por exemplo) impedir que o git
prompt seja clonado quando clonar um repositório github.com
usando SSH.
Eu sei que posso usar StrictHostKeyChecking=no
(por exemplo, esta resposta ), mas isso não é seguro.
Até agora, eu encontrei ...
O GitHub publica suas impressões digitais chave do SSH em https://help.github.com/articles/github-s-ssh-key-fingerprints/
Eu posso usar
ssh-keyscan
para obter a chave do hostgithub.com
.
Como eu combino esses fatos? Dada uma lista pré-preenchida de impressões digitais, como verifico se a saída de ssh-keyscan
pode ser adicionada ao known_hosts
arquivo?
Acho que estou perguntando o seguinte:
Como obtenho a impressão digital de uma chave retornada ssh-keyscan
?
Vamos supor que eu já tenha sido MITM-ed para SSH, mas que posso confiar na página GitHub HTTPS (porque ela possui uma cadeia de certificados válida).
Isso significa que eu tenho algumas chaves de host SSH (suspeitas) (de ssh-keyscan
) e algumas impressões digitais de chaves (confiáveis). Como verifico um contra o outro?
Relacionado: como faço o hash da parte do host da saída ssh-keyscan
? Ou posso misturar hosts com hash / unhashed known_hosts
?
StrictHostKeyChecking=no
é vulnerável ao MITM. Éssh-keyscan
seguro contra o MITM?Respostas:
A parte mais importante da adição "segura" de uma chave ao
known_hosts
arquivo é obter a impressão digital da chave do administrador do servidor. A impressão digital principal deve ser algo como isto:No caso do GitHub, normalmente não podemos conversar diretamente com um administrador. No entanto, eles colocam a chave em suas páginas da web para que possamos recuperar as informações a partir daí.
Instalação manual da chave
1) Tire uma cópia da chave do servidor e obtenha sua impressão digital. NB: Faça isso antes de verificar a impressão digital.
2) Obtenha uma cópia da impressão digital chave do administrador do servidor - nesse caso, navegue até a página com as informações em github.com
3) Compare as chaves das duas fontes
Ao colocá-los diretamente um acima do outro em um editor de texto, é fácil ver se algo mudou
(Observe que a segunda chave foi manipulada, mas se parece bastante com a original - se algo assim acontecer, você estará sob um ataque sério e deverá entrar em contato com um especialista em segurança confiável.)
Se as chaves forem diferentes, interrompa o procedimento e entre em contato com um especialista em segurança
4) Se as chaves forem comparadas corretamente, você deverá instalar a chave que já baixou
Ou para instalar para todos os usuários em um sistema (como root):
Instalação automatizada de chaves
Se você precisar adicionar uma chave durante um processo de compilação, siga as etapas 1 a 3 do processo manual acima.
Feito isso, examine o conteúdo do seu
github-key-temp
arquivo e crie um script para adicioná-lo ao seu arquivo hosts conhecido.Agora você deve se livrar de todos os
ssh
comandos que foramStrictHostKeyChecking
desativados.fonte
Você pode misturar entradas com hash / unhashed no seu arquivo known_hosts.
Portanto, se você deseja adicionar a chave do github, basta:
ssh-keyscan github.com >> ~/.ssh/known_hosts
Se desejar, adicione -H
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
fonte
A maneira mais fácil é buscar manualmente as chaves usando
ssh-keyscan
, verifique-as manualmente:E adicione-os ao seu script, que carregará a chave pública "autoritativa".
fonte