Szukałem więc przyziemnego sposobu na ominięcie ręcznej interakcji nieznanego hosta klonowania repozytorium git, jak pokazano poniżej:
brad@computer:~$ git clone git@bitbucket.org:viperks/viperks-api.git
Cloning into 'viperks-api'...
The authenticity of host 'bitbucket.org (104.192.143.3)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)?
Zanotuj odcisk palca klucza RSA ...
Więc to jest sprawa SSH, to zadziała dla git nad SSH i ogólnie po prostu rzeczy związane z SSH ...
brad@computer:~$ nmap bitbucket.org --script ssh-hostkey
Starting Nmap 7.01 ( https://nmap.org ) at 2016-10-05 10:21 EDT
Nmap scan report for bitbucket.org (104.192.143.3)
Host is up (0.032s latency).
Other addresses for bitbucket.org (not scanned): 104.192.143.2 104.192.143.1 2401:1d80:1010::150
Not shown: 997 filtered ports
PORT STATE SERVICE
22/tcp open ssh
| ssh-hostkey:
| 1024 35:ee:d7:b8:ef:d7:79:e2:c6:43:9e:ab:40:6f:50:74 (DSA)
|_ 2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40 (RSA)
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 42.42 seconds
Najpierw zainstaluj nmap w swoim codziennym sterowniku. nmap jest bardzo pomocny w przypadku niektórych rzeczy, takich jak wykrywanie otwartych portów, a to - ręczna weryfikacja odcisków palców SSH. Wróćmy jednak do tego, co robimy.
Dobry. Jestem narażony na kompromis w wielu miejscach i maszynach, które sprawdziłem - albo bardziej prawdopodobne jest to, że dzieje się bardziej prawdopodobne wyjaśnienie, że wszystko jest jak przystojniak.
Ten „odcisk palca” jest po prostu łańcuchem skróconym za pomocą algorytmu jednokierunkowego dla naszej ludzkiej wygody, na ryzyko, że więcej niż jeden ciąg rozdzieli się na ten sam odcisk palca. Zdarza się, że nazywane są zderzeniami.
Niezależnie od tego, wracamy do oryginalnego ciągu, który możemy zobaczyć w kontekście poniżej.
brad@computer:~$ ssh-keyscan bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
no hostkey alg
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-129
bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-123
no hostkey alg
Tak więc z wyprzedzeniem możemy poprosić o formę identyfikacji od pierwotnego hosta.
W tym momencie jesteśmy ręcznie tak samo narażeni jak automatycznie - ciągi pasują do siebie, mamy podstawowe dane, które tworzą odcisk palca, i możemy poprosić o te podstawowe dane (zapobiegające kolizjom) w przyszłości.
Teraz użyj tego ciągu w sposób, który zapobiega pytaniu o autentyczność hosta ...
Plik znane_hosty w tym przypadku nie używa wpisów w postaci zwykłego tekstu. Poznasz skróty, gdy je zobaczysz, wyglądają jak skróty z losowymi znakami zamiast xyz.com lub 123.45.67.89.
brad@computer:~$ ssh-keyscan -t rsa -H bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
Pierwszy wiersz komentarza pojawia się irytująco - ale możesz się go pozbyć za pomocą prostego przekierowania za pomocą konwencji „>” lub „>>”.
Ponieważ dołożyłem wszelkich starań, aby uzyskać nieskażone dane do identyfikacji „hosta” i zaufania, dodam tę identyfikację do mojego pliku znane_hosty w moim katalogu ~ / .ssh. Ponieważ będzie on teraz identyfikowany jako znany gospodarz, nie otrzymam wspomnianego wyżej monitu, gdy byłeś młodszy.
Dzięki za trzymanie się mnie, proszę bardzo. Dodam klucz RSA bitbucket, abym mógł tam wchodzić w interakcje z moimi repozytoriami git w sposób nieinteraktywny w ramach przepływu pracy CI, ale cokolwiek robisz, co chcesz.
#!/bin/bash
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.old && echo "|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==" >> ~/.ssh/known_hosts
W ten sposób pozostajesz dziś dziewicą. Możesz zrobić to samo z github, postępując według podobnych wskazówek we własnym czasie.
Widziałem tak wiele postów przepełnienia stosu, mówiących o programowym dodawaniu klucza na ślepo bez żadnego sprawdzania. Im bardziej sprawdzasz klucz z różnych komputerów w różnych sieciach, tym większe masz zaufanie, że host jest tym, o którym mówi, że jest - i to najlepsze, czego możesz oczekiwać od tej warstwy bezpieczeństwa.
ŹLE
ssh -oStrictHostKeyChecking = brak nazwy hosta [polecenie]
ŹLE
ssh-keyscan -t rsa -H nazwa hosta >> ~ / .ssh / known_hosts
Proszę nie rób żadnej z powyższych rzeczy. Masz możliwość zwiększenia szansy na uniknięcie podsłuchiwania twoich transferów danych przez człowieka w środku ataku - skorzystaj z okazji. Różnicą jest dosłownie sprawdzenie, czy posiadany klucz RSA jest serwerem bona fide, a teraz wiesz, jak uzyskać te informacje, aby je porównać, abyś mógł zaufać połączeniu. Pamiętaj tylko, że więcej porównań z różnych komputerów i sieci zwykle zwiększy twoją zdolność do zaufania połączenia.