Responda sim em um script bash

24

Estou tentando git cloneexecutar um script bash, mas a primeira vez que executo o script e o servidor ainda não é conhecido, o script falha. Eu tenho algo parecido com isto:

yes | git clone git@github.com:repo/repoo.git
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? 

Mas está ignorando o yes. Você sabe como forçar git clonea adição da chave aos hosts conhecidos?

Rafael
fonte
Que tal echo yes | git clone [email protected]:repo/repoo.git?
asfallows
3
@asfallows, Rafael: echo yesnão é uma boa abordagem: na segunda vez em que você executar o comando, o ssh não perguntará se deseja continuar porque a chave do servidor já será conhecida.
Gilles 'SO- stop be evil'

Respostas:

21

Adicione o seguinte ao seu ~/.ssh/configarquivo:

Host github.com
    StrictHostKeyChecking no

Qualquer coisa que utilize o cliente open-ssh para estabelecer um shell remoto (com o cliente git) deve pular as verificações de chave em github.com.

Na verdade, é uma péssima idéia, já que qualquer forma de pular as verificações (se você pressiona automaticamente sim ou pula a verificação em primeiro lugar) cria espaço para um homem com um compromisso de segurança intermediário. Uma maneira melhor seria recuperar e validar a impressão digital e armazená-la no known_hostsarquivo antes de precisar executar algum script que se conecte automaticamente.

Caleb
fonte
2
Com uma forte preferência para recuperar e validar a impressão digital e armazená-la no known_hostsarquivo antes .
Gilles 'SO- stop be evil'
1
Muito obrigado pela sua resposta, acabei seguindo a abordagem de adicionar a impressão digital no conhecido_hosts. É como :) mais seguro
Rafael
Oh, eu estou usando fantoche para fazer isso. Se alguém estiver interessado em usá-lo aqui é a receita: gist.github.com/1155725
Rafael
5

yessaídas y. Principais necessidades de aceitação da RSA yes. Você pode tentar yes yes | git clone [email protected]:repo/repoo.gitassim yessaídas em yesvez de y.

jfg956
fonte
5
Por alguma razão, isso não funcionou com o git clone, para mim.
Matt V.
Nem funcionou para mim. Também echo "yes" | ...não. Eu acho gitque não aceita tubulação. Talvez apenas em alguma versão?
Udondan
3

A execução ssh-keyscan -H github.com >> ~/.ssh/known_hostsantes da clonagem adicionará a chave e impedirá que o prompt apareça.

Obviamente, essa abordagem também é vulnerável a um ataque MITM.

Kevin Smyth
fonte
1

Eu já tive esse problema antes. Embora estivesse em uma máquina Windows, é necessário usar o ssh para conectar-se a um host remoto. Encontramos o mesmo problema que a primeira conexão sempre falhava porque não reconhecia as chaves.

Eu o resolvi conectando manualmente, localizando a chave do registro e importando-a no início do script. No Linux, deve ser a mesma idéia geral: você deseja adicionar este servidor a uma lista de hosts confiáveis, para que o ssh não pergunte se você confia nele sempre.

Depois de se conectar manualmente, localize o arquivo-chave e adicione-o ao seu arquivo known_hosts. Dessa forma, o ssh examinará esse arquivo, suponha que você saiba o que está fazendo e continue sem perguntar sobre a impressão digital.

n0pe
fonte