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_hosts
no 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_keys
tr-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 .ssh
pasta. Devemos adicionar a chave pública a cada um dos known_hosts
arquivos?
Questão 2: descobri que ssh-keyscan -t rsa tr-mdm
retornará 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_hosts
arquivo 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_hosts
manualmente 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_keys
no 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