Odpowiedz tak w skrypcie bash

24

Próbuję zrobić git cloneskrypt bash, ale kiedy uruchamiam skrypt po raz pierwszy, a serwer nie jest jeszcze znany, skrypt nie działa. Mam coś takiego:

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)? 

Ale to ignoruje yes. Czy wiesz, jak wymusić git clonedodanie klucza do znanych hostów?

Rafael
źródło
Co echo yes | git clone [email protected]:repo/repoo.git?
asfallows
3
@asfallows, @Rafael: echo yesNie jest to dobre podejście: po raz drugi uruchomić komendę ssh nie zapyta, czy chcesz kontynuować, ponieważ klucz serwer będzie już znane.
Gilles „SO- przestań być zły”

Odpowiedzi:

21

Dodaj następujące elementy do ~/.ssh/configpliku:

Host github.com
    StrictHostKeyChecking no

Wszystko, co korzysta z klienta open-ssh w celu ustanowienia zdalnej powłoki (podobnie jak klient git), powinno pomijać sprawdzanie klucza na github.com.

To właściwie zły pomysł, ponieważ jakakolwiek forma pomijania czeków (niezależnie od tego, czy automatycznie trafiasz tak, czy pomijasz czek), stwarza miejsce dla człowieka w środkowym kompromisie bezpieczeństwa. Lepszym sposobem byłoby pobranie i sprawdzenie odcisku palca i zapisanie go w known_hostspliku przed uruchomieniem skryptu, który automatycznie się łączy.

Caleb
źródło
2
Z silną preferencją, aby pobrać i zweryfikować odcisk palca i zapisać go wcześniej w known_hostspliku .
Gilles „SO- przestań być zły”
1
Bardzo dziękuję za odpowiedź. Skończyło się na tym, że dodałem odcisk palca do znanych hostów. To jest bardziej bezpieczne :)
Rafael
Och, używam do tego marionetki. Jeśli ktoś jest zainteresowany skorzystaniem z tego tutaj, jest przepis: gist.github.com/1155725
Rafael
5

yeswyjścia y. Potrzeby akceptacji klucza RSA yes. Można spróbować yes yes | git clone [email protected]:repo/repoo.gittak yeswyprowadza yeszamiast y.

jfg956
źródło
5
Z jakiegoś powodu nie działało to dla mnie z git clone.
Matt V.
Dla mnie też to nie działało. Też echo "yes" | ...nie. Myślę, że gitnie akceptuje rurociągów. Może tylko w niektórych wersjach?
udondan
3

Uruchomienie ssh-keyscan -H github.com >> ~/.ssh/known_hostsprzed klonowaniem doda klucz i zapobiegnie wyświetleniu monitu.

Oczywiście takie podejście jest również podatne na atak MITM.

Kevin Smyth
źródło
1

Natrafiłem już na ten problem. Chociaż był na komputerze z systemem Windows, ale potrzebowaliśmy użyć ssh, aby połączyć się ze zdalnym hostem. Napotkaliśmy ten sam problem, że pierwsze połączenie zawsze kończyło się niepowodzeniem, ponieważ nie rozpoznawał kluczy.

Rozwiązałem go, łącząc się ręcznie, znajdując klucz rejestru i importując go na początku skryptu. W Linuksie powinien być ten sam ogólny pomysł: chcesz dodać ten serwer do listy zaufanych hostów, aby ssh nie pytał cię, czy ufasz mu za każdym razem.

Po połączeniu ręcznym znajdź plik klucza i dodaj go do pliku znanego_hosta. W ten sposób ssh przejrzy ten plik, zakładając, że wiesz, co robisz i kontynuujesz bez pytania o odcisk palca.

n0pe
źródło