Curl falhou ao ler o arquivo known_hosts

4

Estou tentando baixar um arquivo de um servidor Centos 6 usando outro servidor Centos 6 como cliente e curl com o protocolo scp e estou obtendo esta saída de erro:

$ curl -v -O scp://cz/path/to/file
* About to connect() to cz port 22 (#0)
*   Trying 1.2.3.4... connected
* Connected to cz (1.2.3.4) port 22 (#0)
* Failed to read known hosts from /home/cpn/.ssh/known_hosts
* SSH host check: 0, key: AAAAB3NzaC1yc2EAAAABIwAAAQEAyeeDgYFsHi3Ks3PxCXt69IHBr7yNII720sXOm9WKIdGnwPf7QHbLsMf41mctcGRSJ2yO2EXpNEbZQhdUqs3oImdTn2OHF/K8STK1GXMVseusgmPuQWBt36AVPon7h9lSCjtxt+1UpFJoireXvhUDlgg9i1C9QbE04GAmA7vMOmtcVt3/3F6X/hKhOZvHj1gu5+RzCO8fXo2R8XeRoN0GcU2jVOhug0G+hXAiHymh5JzVm4YlCzsNIv3mDOF2lZRLdkor5FDKjBY8/o/5O8U0lWm4ie2S7qDppqCJP2SnNTWlaM3k5HDmdyEKKZ0lV+qG33q3ADZxjBeIKQtWLZfC3w==
* SSH authentication methods available: publickey,gssapi-keyex,gssapi-with-mic,password
* Using ssh public key file /home/cpn/.ssh/id_dsa.pub
* Using ssh private key file /home/cpn/.ssh/id_dsa
* SSH public key authentication failed: Username/PublicKey combination invalid
* Authentication failure
* Closing connection #0

Eu posso fazer o download do arquivo usando scp sem perguntas:

$ scp cz:/path/to/file .

Eu posso fazer login no servidor com ssh novamente sem perguntas

$ ssh cz

Existem as chaves ssh-rsa e ssh-dss no arquivo authorized_keys do servidor

O que exatamente é curl reclamando? Meu único palpite é que curl quer uma chave dsa no arquivo known_hosts do cliente. Se esse for o caso, como gerá-lo? Ou como fazer com que curl procure a chave rsa nesse arquivo?

Atualizar

No cliente:

$ ls -l /home/cpn/.ssh/known_hosts
-rw-r--r--. 1 cpn cpn 1970 Nov 12 16:12 /home/cpn/.ssh/known_hosts
    
por Clodoaldo 12.11.2014 / 17:44

2 respostas

2

Eu posso pelo menos explicar o que provavelmente está acontecendo: o . após as permissões na saída de ls -l indica a presença de uma política do SELinux, que substitui as permissões de arquivo com base no programa que está acessando o arquivo. Use ls -Z ~/.ssh/known_hosts para exibir a política do arquivo.

Presumivelmente, /usr/bin/ssh e seus programas complementares ( ssh-keygen , scp , etc.) são os únicos programas que têm permissão para acessar esse arquivo. Sou cético em relação a essa política: é útil editar ~/.ssh/known_hosts manualmente às vezes. No entanto, não entendo porque o curl gostaria de ler esse arquivo, em vez de deixar ssh e amigos fazerem isso.

Você pode usar o comando chcon para editar a política desse arquivo e restorecon para restaurar a política padrão. Veja o wiki do CentOS para mais informações sobre o SELinux.

    
por 13.11.2014 / 02:46
0

Para pessoas que encontram esta página no google:

Parece que versões antigas do cURL engasgam com known_hosts arquivos com tipos de chaves não reconhecidos, e versões suficientemente antigas do cURL não reconhecem nenhum tipo de chave, mas ssh-rsa .

Por exemplo, meu cURL é a versão 7.29.0 (com 6 anos e a última disponível no CentOS 7 até o momento) e deixará de ler as chaves após o primeiro ecdsa-sha2-nistp256 , que é a maioria das chaves no meu arquivo known_hosts .

    
por 02.11.2018 / 22:26

Tags