O que significa o seguinte erro Java SFTP?

O que significa o seguinte erro Java SFTP?

Sou novo no domínio de segurança e queria entender esse erro que estou recebendo:

com.jcraft.jsch.JSchException: UnknownHostKey: 127.0.0.1. A impressão digital da chave RSA é a2:39:3f:44:88:e9:1f:d7:d1:71:f4:85:98:fb:90:dc em com.jcraft.jsch.Session.checkHost(Session.java: 797) em com.jcraft.jsch.Session.connect(Session.java:342) em com.jcraft.jsch.Session.connect(Session.java:183) em FileTransfer.main(FileTransfer.java:37) Processo encerrado com código de saída 0.

o que significa `unknownHostKey: 127.0.0.1. Chave RSA

impressão digital é a2:39:3f:44:88:e9:1f:d7:d1:71:f4:85:98:fb:90:dc`

Preciso definir um arquivo chamado known_hostsarquivo para corrigir esse erro:

Tentei configurar assim:

127.0.0.1 

Mas isso não funciona. Estou entendendo mal o que significa um known_hostsarquivo?

Responder1

O crédito por esta resposta vai paraGillesdeSite de segurança StackExchange, como seupublicarexplicar known_hostse authorized_keysarquivos é um bom ponto de partida para entender esse componente do SSH/SFTP.

Veja abaixo:


O known_hostsarquivo permite que o cliente autentique o servidor, para verificar se ele não está se conectando a um imitador. O authorized_keysarquivo permite que o servidor autentique o usuário.

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. Isso autentica o servidor: se esta parte do protocolo for bem-sucedida, o cliente saberá que o servidor é quem afirma 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 propósito, known_hostspode conter qualquer tipo de chave pública suportada pela implementação SSH, não apenas DSA (também RSA e ECDSA).

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 usuário, o usuário poderá apresentar uma das 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 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.

informação relacionada