Git mówi „Ostrzeżenie: trwale dodane do listy znanych hostów”


192

Za każdym razem, gdy korzystam z git do interakcji z pilotem, na przykład podczas ciągnięcia lub pchania, pojawia się następujący komunikat:

Ostrzeżenie: na stałe dodano „...” (RSA) do listy znanych hostów.

Jak mogę zapobiec wyświetlaniu tej irytującej wiadomości? To tylko irytacja - wszystko działa poprawnie.


1
Czy naprawdę masz na myśli za każdym razem? Czy wyświetla monit w formularzu The authenticity of host '...' can't be established. RSA key fingerprint is .... Are you sure you want to continue connecting (yes/no)?, czy też go stłumiłeś? Jeśli tak, to czy za każdym razem jest to ten sam odcisk palca? Jeśli nie, to naprawdę przerażające . Mniej przerażającą opcją byłoby to, że w jakiś sposób nie udaje mu się zapisać do pliku hosts, więc próbuje ponownie za każdym razem. Rzuć okiem ~/.ssh/known_hosts?
Cascabel

1
Tak. <i> Za każdym razem </i>. Jednak nie widzę komunikatu „Jesteś pewien ...” - może go stłumiłem.
Donald Taylor

Czy host znajduje się na liście ~/.ssh/known_hosts? (Czy jest wymieniony 5000 razy?) Czy ~/.ssh/configistnieje / zawiera coś (szczególnie wartość StrictHostKeyChecking)?
Cascabel

Host jest wymieniony w tym pliku jeden raz i jest to jedyny wpis.
Donald Taylor

2
Zgaduję, że zawartość twojego known_hostspliku jest zła. Powinien to być klucz hosta, na jednej strasznie długiej linii. Jeśli masz tylko nazwę hosta (na przykład), to nie będzie działać. Zalecam usunięcie tego pliku (jeśli w rzeczywistości zawiera on tylko informacje o tym pojedynczym hoście) i zezwolenie SSH na utworzenie go przy następnym połączeniu. Po tym powinno być cicho.
tripleee

Odpowiedzi:


240

Rozwiązanie: utwórz ~/.ssh/configplik i wstaw linię:

UserKnownHostsFile ~/.ssh/known_hosts

Następnie zobaczysz komunikat przy następnym dostępie do Github, ale potem już go nie zobaczysz, ponieważ host został dodany do known_hostspliku. To rozwiązuje problem, a nie tylko ukrywa komunikat dziennika.

Ten problem mnie denerwował od dłuższego czasu. Problem występuje, ponieważ klient OpenSSH skompilowany dla systemu Windows nie sprawdza pliku znane_hosty~/.ssh/known_hosts

ssh -vvvvvvvvvvvvvvvvvvv git@github.com

debug3: check_host_in_hostfile: filename /dev/null
debug3: check_host_in_hostfile: filename /etc/ssh/ssh_known_hosts
debug3: check_host_in_hostfile: filename /dev/null
debug3: check_host_in_hostfile: filename /etc/ssh/ssh_known_hosts
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.

9
Tak, nie uważam, aby pomijanie ostrzeżeń lub błędów było właściwym rozwiązaniem problemu. ;)
Jeremiah Gowdy

1
ostatnio miałem ten sam problem na mojej maszynie Ubuntu. Zaczęło się tak zachowywać po tym, jak użyłem innego (niż mój domyślny ~/.ssh/id_rsa) klucza do połączenia z serwerem. Jak wspomniał @JeremiahGowdy, mam debug3: load_hostkeys: loading entries for host "172.16.3.101" from file "/dev/null". Dlaczego SSH zaczyna używać /dev/nulljako znane_hosty po zmianie klucza?
m-ric

6
Działa świetnie! W końcu głupie ostrzeżenie ustało. Btw w systemie Windows, ~w ~/.ssh/configto folder domowy użytkownika. Aby łatwo otworzyć, naciśnij Win-R , wpisz cmd Enter . Wiersz polecenia powinien już być otwarty w folderze domowym. Wpisz cd .ssh Enter , a następnie start . Enter, aby otworzyć folder w Eksploratorze Windows. Następnie możesz utworzyć plik konfiguracyjny w Notatniku (bez rozszerzenia .txt podczas zapisywania). (Użytkownicy Pro mogą echo bezpośrednio do nowego pliku w samym wierszu polecenia ;)). Uruchom dwukrotnie polecenie git dotyczące zdalnego (jak git fetch) i gotowe.
ADTC

1
dlaczego masz 20 v dla ssh?
bubakazouba

3
@bubakazouba Im więcej v, tym bardziej szczegółowy log dostaje, sprawdź w tym dokumentację.
Tyle

90

Dodaj następujący wiersz do pliku konfiguracyjnego ssh ($ HOME / .ssh / config):

LogLevel=quiet

Jeśli uruchomisz ssh z wiersza poleceń, dodaj następującą opcję do ciągu poleceń:

-o LogLevel=quiet

Na przykład następujące polecenie wypisuje wersję gcc zainstalowaną na machine.example.org (i bez ostrzeżenia):

ssh -o UserKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no \
    -o LogLevel=quiet \
    -i identity_file \
    machine.example.org \
    gcc -dumpversion

1
Dodanie „LogLevel = quiet” do pliku „config” zadziałało. Dziękuję Ci.
Donald Taylor,

3
Aby zachować bezpieczeństwo, dobrze byłoby umieścić „LogLevel = quiet” w sekcji „Host”.
Joe

39
LogLevel=quietjest złym pomysłem, chce wyświetlić wszystkie błędy, chce po prostu uniknąć tego konkretnego ohydnego błędu. Prawdopodobnie dlatego, że oszukał ssh, aby używał go /dev/nulljako known_hostspliku, prawdopodobnie dlatego, że chciał wyłączyć known_hostssprawdzanie odcisków palców, ale nie mógł, ponieważ panowie ssh na to nie pozwolili.
Elazar Leibovich

@bukzor loglevel=errornadal wyświetla komunikat „Połączenie z <serwerem> zamknięte” po zakończeniu połączenia, co jest również bardzo denerwujące dla skryptów.
Guss,

Głosowałem za tym, ponieważ tak naprawdę to nie rozwiązuje problemu. Po prostu to ukrywa.
alaboudi

60

Ustaw LogLevelna ERROR(nie QUIET) w ~/.ssh/configpliku, aby uniknąć wyświetlania tych błędów:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR

2
W moim przypadku działało to najlepiej - lub możesz podać „-oLogLevel = ERROR” w wierszu poleceń
Brad

5

Ta wiadomość pochodzi od SSH, która ostrzega, że ​​łączysz się z hostem, z którym nigdy wcześniej się nie łączyłeś. Nie polecam go wyłączać, ponieważ oznaczałoby to, że możesz przegapić ostrzeżenie o zmianie klucza hosta, co może wskazywać na atak MITM na sesję SSH.


1
Ale łączę się z nim 10-15 razy każdego dnia i nadal otrzymuję to ostrzeżenie.
Donald Taylor

@JackB. Spójrz ~/.ssh/known_hostsi sprawdź, czy Twój host tam jest.
Borealid,

Czy klucz zmienia się z jakiegoś powodu? Sprawdź odcisk palca w pliku względem odcisku palca wysyłanego przez ssh. Ponadto, czy tryb twojego katalogu .ssh jest ustawiony na 0700?
Jason Carreiro

2
@JasonCarreiro, jestem dużym chłopcem, wiem, że nikt nie przeprowadzi ataku MITM wewnątrz mojego stelaża, bezpieczeństwo jest kompromisem i chcę, aby nowe komputery działały po wyjęciu z pudełka z kluczem wstępnym, bez potrzeby zarządzania urzędem certyfikacji lub ssh-keyscan.
Elazar Leibovich

4

Aby ukryć komunikaty ostrzegawcze ssh, możesz dodać następujące wiersze do ~/.ssh/config:

Host *
LogLevel error

Spowoduje to wyłączenie ostrzeżeń, ale nie komunikatów o błędach. Podobnie jak inne ustawienia ~/.ssh/config, możesz skonfigurować dla LogLevelposzczególnych hostów, jeśli chcesz mieć bardziej szczegółową kontrolę.


2

Oznacza to głównie, że wprowadzono zmiany dla klucza dla tego hosta ~/.ssh/known_hostsi nie będzie go automatycznie aktualizował. Dlatego za każdym razem, gdy pojawia się ten komunikat ostrzegawczy.

Dzieje się tak często w przypadku łączenia się z ponownie utworzonymi maszynami wirtualnymi, które zmieniają klucz z tym samym adresem IP

Rozwiązanie

Jeśli masz tylko jeden wpis, możesz usunąć ~/.ssh/known_hostsplik, a po pierwszym połączeniu klucz będzie tam, a po nim nie będzie żadnych komunikatów ostrzegawczych.

Jeśli masz wiele wpisów, możesz użyć polecenia poniżej, aby je usunąć

$ ssh-keygen -R <hostname>

Działa dla mnie dobrze


0

Jeśli używasz repozytorium z GitHub, rozważ użycie wersji URL HTTPS zamiast tego, aby całkowicie uniknąć tego problemu:

Kliknij przycisk HTTP i zamiast tego sklonuj ten adres URL

Jeśli sklonujesz swoje repozytorium z poziomu aplikacji Windows GitHub, to jest to, czego używa do zdalnego adresu URL. Może wiedzą coś, czego nie wiemy.


Uwaga: Jeśli używasz uwierzytelniania za pomocą klucza prywatnego, nie możesz używać HTTP (S).
qwertzguy

0

Mam to samo pytanie i okazało się, że .sshw moim pliku nie ma pliku ~. Właśnie utworzyłem .sshkatalog pod ~ścieżką i problem został rozwiązany.



0

Dodaj klucz ssh

ssh-keygen -t rsa -b 4096 -C "abc@abc.com"

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/bitbucket_rsa

plik konfiguracyjny skrzyni

crate ~/.ssh/config

dodaj poniżej linii.

UserKnownHostsFile ~/.ssh/known_hosts

Następnie dodaj klucz pub i sklonuj swoje repozytorium ... Gotowe .....


0

Napotkałem ten sam błąd w maszynie wirtualnej z systemem Linux / Cent OS, a to dlatego, że adres IP zmieniał się po ponownym uruchomieniu. Aby obejść ten problem, zdefiniowałem statyczny adres IP w sieci i dodałem ten wpis do pliku / etc / hosts. W przypadku statycznego adresu IP należy podać nieco wyższą wartość zakresu. Na przykład jeśli bieżący adres IP (ipconfig / ifconfig) to 192.168.0.102, następnym razem po ponownym uruchomieniu może to być 192.168.0.103. Zdefiniuj więc swój statyczny adres IP w ustawieniach IPV4 jako 192.168.0.181, co powinno załatwić sprawę.


spróbuj wyróżnić słowa kluczowe i
wyjaśnij, w

0

W moim przypadku było tak, ponieważ administrator, który skonfigurował serwer, ustawił te opcje w ~/.ssh/config

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

Który działał dobrze w większości przypadków, nie używając ~/.ssh/known_hostspliku. Ale w przypadku korporacyjnego repozytorium gitlab za każdym razem, gdy wyświetlało „Ostrzeżenie: Trwale dodane ... do listy znanych hostów”.

Moim rozwiązaniem było skomentowanie UserKnownHostsFile /dev/nulllinii, co pozwoliło na utworzenie ~/.ssh/known_hosts. Potem nie dał już żadnych ostrzeżeń.

Możesz również mieć stare / nieprawidłowe wpisy w swoim known_hosts.

# find entry in ~/.ssh/known_hosts
ssh-keygen -F <hostname>

# delete entry in ~/.ssh/known_hosts
ssh-keygen -R <hostname>

-1

Odrzucam moje rozwiązanie ze względu na ciągłe przegłosowania.
To było najlepsze rozwiązanie bez włamywania się do kodu źródłowego samego klienta SSH.
Jeśli ktoś jest zainteresowany, sprawdź historię edycji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.