Por que o ssh -i ainda solicita a senha?

1

Eu tenho privilégio su para o usuário foouser on target.host . Entrei no diretório ~/.ssh e obtive a chave ssh pública de id_rsa.pub . Eu também adicionei a authorized_keys .

Eu queria ativar ssh de outro servidor. Fui a esse outro servidor e salvei a chave pública em /path/to/foouser.pub e tentei executar:

ssh -i /path/to/foouser.pub [email protected]

mas ainda foi solicitada a senha. Por quê? Existe algo que precisa ser alterado na configuração do ssh para o servidor do SSH?

    
por amphibient 17.10.2017 / 23:36

1 resposta

4

Você precisa usar sua chave privada, não sua chave pública, com o sinal -i .

Como sua chave pública não pode passar o desafio enviado do outro servidor com base na mesma chave pública (criptografia assimétrica, exigindo que você use a chave privada para responder ao desafio baseado em chave pública), quando a autenticação de chave falhar ssh prossegue para tentar outros métodos de autenticação, incluindo a senha.

A maneira como a criptografia assimétrica funciona é que sua chave privada é mantida privada. Ela não deve ser compartilhada com ninguém; ele não deve ser copiado do host no qual ele é criado. (E certamente não deve ser enviado por e-mail!)

A chave pública pode ser enviada para todo o lugar.

Os dados criptografados com a chave pública só podem ser descriptografados pela chave privada, e os dados criptografados pela chave privada só podem ser descriptografados pela chave pública.

Matematicamente, no algoritmo RSA, não há diferença funcional entre as duas chaves, exceto que uma delas deve ser mantida em segredo. No entanto, na implementação SSH real, as duas chaves são diferenciadas e parecem diferentes, por isso certifique-se de que:

  • Sua chave pública e NÃO sua chave privada é adicionada ao arquivo "chaves autorizadas" no servidor de destino e
  • Você passa sua chave privada para ssh -i . (Nenhum dano se você passar sua chave pública para -i , simplesmente não funcionará.)

Se você já compartilhou sua chave particular ou copiou-a para o servidor de destino, gere uma nova chave e exclua a antiga.

Eu olhei mais de perto para exatamente quais etapas você realizou. Você precisa fazer o backup e começar de novo. Nesse ponto, você deve excluir o par de chaves de foouser on target.host e remover essa chave pública de QUALQUER arquivo de chaves autorizadas em que você colocou. Chaves particulares nunca devem ser copiadas.

Note que para SSH em [email protected] de someother.host NÃO requer que o foouser tenha um par de chaves.

O que é necessário é que você gere um par de chaves em someother.host para a contagem de usuários da qual você será o SSHing , e você coloca a chave pública desse par em ~foouser/.ssh/authorized_keys on target.host .

Simples passo a passo, mas omitindo as etapas de limpeza de segurança que você deve fazer agora desde que você copiou uma chave privada. Apenas a maneira simples de configurar a conectividade:

  1. Em startserver.host , como usuário startinguser , execute ssh-keygen . Você pode fazer uma frase-senha ou não; você decide. (Uma frase secreta adiciona segurança adicional caso a chave privada seja comprometida.) Basta pressionar enter em cada prompt para criar o par de chaves com as configurações padrão, o que é bom.
  2. Execute cat ~/.ssh/id_rsa.pub para exibir a chave pública .
  3. Copie a saída do comando para o outro host ( target.host ) e anexe-a a ~foouser/.ssh/authorized_keys .
  4. De startserver.host , execute ssh [email protected] . Você não precisa do sinalizador -i .

Para responder ao comentário:

If private keys should never be copied—can you explain what good is ssh -i when it expects a private key?

Você gera o par de chaves no host do qual deseja ssh para outros servidores.

Sua chave privada permanece nesse servidor e nunca é copiada em outro lugar. (Talvez esteja nos seus backups. Talvez não. Mas para uso, nunca é copiado em outro lugar.)

A sua chave pública é copiada em todos os servidores aos quais você deseja acesso de login e, especificamente, é anexada ao arquivo authorized_keys no diretório .ssh no diretório inicial do usuário que você deseja conseguir fazer login como nesse servidor.

Com esta configuração (o padrão), você nunca precisará de -i . No entanto, você pode ter mais de um par de chaves no seu próprio computador que você usa para diferentes propósitos (diferentes conjuntos de servidores). O ponto de -i é poder especificar um local alternativo a partir do qual sua identidade de chave privada será lida. Você poderia obter o mesmo efeito com cd ~/.ssh; mv id_rsa id_rsa.bak; mv id_rsa.other id_rsa e, em seguida, apenas ssh ... sem -i . Mas -i é mais conveniente.

    
por 17.10.2017 / 23:43

Tags