Autenticação baseada em chave SSH: hosts_conhecidos vs chaves_autorizadas

Autenticação baseada em chave SSH: hosts_conhecidos vs chaves_autorizadas

Li sobre como configurar chaves ssh no Linux e tenho algumas dúvidas. Corrija-me se eu estiver errado…

Digamos que o host tr-lgto queira se conectar ao host tr-mdm usando ssh. Se quisermos ter certeza de que é o verdadeiro tr-mdm, geramos um par de chaves no tr-mdm e adicionamos a chave pública known_hostsno tr-lgto. Se o tr-mdm quiser verificar se é o verdadeiro tr-lgto, então o tr-lgto deverá gerar um par de chaves e adicionar a chave pública ao authorized_keystr-mdm.

Questão 1: Não hádo utilizadorcampo no arquivoknown_hosts, apenas endereços IP e nomes de host. tr-mdm pode ter muitos usuários, cada um com sua própria .sshpasta. Devemos adicionar a chave pública a cada um dos known_hostsarquivos?

Questão 2: descobri que ssh-keyscan -t rsa tr-mdmretornará a chave pública do tr-mdm. Como posso saber a qual usuário esta chave pertence? Além disso, a chave pública /root/.ssh/é diferente daquela que o comando retorna. Como isso pode ser?

Responder1

Você está confundindo a autenticação da máquina servidora com a máquina cliente e a autenticação do usuário na máquina servidora.

Autenticação de servidor

Uma das primeiras coisas que acontece quando a conexão SSH está sendo estabelecida é que o servidor envia sua chave pública ao cliente e prova (graças acriptografia de chave pública) ao cliente que conhece a chave privada associada. Isto autentica o servidor: se esta parte do protocolo for bem sucedida, o cliente sabe que o servidor é quem finge ser.

O cliente pode verificar se o servidor é conhecido e não algum servidor não autorizado tentando se passar por correto. O SSH fornece apenas um mecanismo simples para verificar a legitimidade do servidor: ele lembra os servidores aos quais você já se conectou, no ~/.ssh/known_hostsarquivo da máquina cliente (há também um arquivo para todo o sistema /etc/ssh/known_hosts). Na primeira vez que você se conecta a um servidor, você precisa verificar por algum outro meio se a chave pública apresentada pelo servidor é realmente a chave pública do servidor ao qual você deseja se conectar. Se você tiver a chave pública do servidor ao qual está prestes a se conectar, poderá adicioná-la ~/.ssh/known_hostsmanualmente no cliente.

A autenticação do servidor deve ser feita antes de você enviar quaisquer dados confidenciais para ele. Em particular, se a autenticação do usuário envolver uma senha, a senha não deverá ser enviada para um servidor não autenticado.

Autenticação de usuário

O servidor só permite que um usuário remoto faça login se esse usuário puder provar que tem o direito de acessar essa conta. Dependendo da configuração do servidor e da escolha do utilizador, este poderá apresentar uma de diversas formas de credenciais (a lista abaixo não é exaustiva).

  • O usuário poderá apresentar a senha da conta que está tentando acessar; o servidor então verifica se a senha está correta.
  • O utilizador pode apresentar uma chave pública e comprovar que possui a chave privada associada a essa chave pública. Este é exatamente o mesmo método usado para autenticar o servidor, mas agora o usuário está tentando provar sua identidade e o servidor está verificando-a. A tentativa de login é aceita caso o usuário comprove que conhece a chave privada e que a chave pública está na lista de autorização da conta ( ~/.ssh/authorized_keysno servidor).
  • Outro tipo de método envolve delegar parte do trabalho de autenticação do usuário à máquina cliente. Isso acontece em ambientes controlados, como empresas, quando muitas máquinas compartilham as mesmas contas. O servidor autentica a máquina cliente pelo mesmo mecanismo usado ao contrário e, em seguida, depende do cliente para autenticar o usuário.

Responder2

Meus amigos me deram a resposta. Por padrão, a chave identifica uma máquina e não um usuário. Portanto, as chaves são armazenadas em /etc/ssh/. É por isso que recebi uma chave diferente daquela armazenada em /root/.ssh

informação relacionada