Git говорит: «Предупреждение: навсегда добавлен в список известных хостов»

192

Каждый раз, когда я использую git для взаимодействия с пультом, например, когда вы тянете или толкаете, мне выдается следующее сообщение:

Предупреждение. Постоянно добавлено «...» (RSA) в список известных хостов.

Как я могу предотвратить отображение этого раздражающего сообщения? Это только раздражение - все работает правильно.

Дональд Тейлор
источник
1
Вы действительно имеете в виду каждый раз? Это дает вам подсказку формы The authenticity of host '...' can't be established. RSA key fingerprint is .... Are you sure you want to continue connecting (yes/no)?, или вы ее подавили? Если это так, каждый раз один и тот же отпечаток? Если это не так, это действительно страшно . Менее страшным вариантом будет то, что каким-то образом ему не удастся записать файл hosts, поэтому он пытается снова каждый раз. Посмотрите на ~/.ssh/known_hosts?
Каскабель
1
Да. <Я> Каждый </ I> раз. Однако я не вижу сообщения «Вы уверены ...» - возможно, я его подавил.
Дональд Тейлор
Хост указан в списке ~/.ssh/known_hosts? (Это перечислено 5000 раз?) Существует ~/.ssh/config/ содержит что-нибудь (особенно значение для StrictHostKeyChecking)?
Каскабель
Хост указан в этом файле один раз, и это единственная запись.
Дональд Тейлор
2
Я предполагаю, что содержимое вашего known_hostsфайла плохое. Это должен быть ключ хоста на одной ужасно длинной линии. Если у вас есть только имя хоста (например), оно не будет работать. Я рекомендую удалить этот файл (если он действительно содержит информацию только для этого хоста) и разрешить SSH создавать его при следующем подключении. После этого должно быть тихо.
tripleee

Ответы:

240

Решение: создайте ~/.ssh/configфайл и вставьте строку:

UserKnownHostsFile ~/.ssh/known_hosts

Затем вы увидите сообщение при следующем доступе к Github, но после этого вы больше его не увидите, потому что хост добавлен в known_hostsфайл. Это устраняет проблему, а не просто скрывает сообщение журнала.

Эта проблема беспокоила меня довольно долго. Проблема возникает из-за того, что клиент OpenSSH, скомпилированный для Windows, не проверяет файл known_hosts в~/.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
Да, я не считаю подавление предупреждений или ошибок правильным решением проблемы. ;)
Иеремия Гауди
1
недавно я столкнулся с той же проблемой на моей машине с Ubuntu. Он начал вести себя так после того, как я использовал другой (по умолчанию ~/.ssh/id_rsa) ключ для подключения к серверу. Как упомянул @JeremiahGowdy, у меня есть debug3: load_hostkeys: loading entries for host "172.16.3.101" from file "/dev/null". Почему SSH начинает использовать /dev/nullкак known_hosts после того, как я изменил ключ?
m-ric
6
Прекрасно работает! Наконец глупое предупреждение прекратилось. Btw на ОС Windows, то ~в ~/.ssh/configэто домашняя папка пользователя. Чтобы открыть его, нажмите Win-R , введите cmd Enter . Командная строка должна уже открыться в вашей домашней папке. Введите cd .ssh Enter , а затем start . Enter, чтобы открыть папку в проводнике Windows. Затем вы можете создать файл конфигурации в блокноте (без расширения .txt при сохранении). (Профессиональные пользователи могут напрямую переходить к новому файлу в самой командной строке ;)). Дважды запустите команду git, включающую remote (вроде git fetch), и все готово.
ADTC
1
почему у вас 20 v для ssh?
bubakazouba
3
@bubakazouba Чем больше v, тем более многословным становится журнал, проверьте документы для этого. Трех было бы достаточно, двадцать - это излишество: D
Петр Манек
90

Добавьте следующую строку в ваш конфигурационный файл ssh ($ HOME / .ssh / config):

LogLevel=quiet

Если ssh запускается из командной строки, добавьте следующую опцию в командную строку:

-o LogLevel=quiet

Например, следующее распечатывает версию gcc, установленную на machine.example.org (и без предупреждения):

ssh -o UserKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no \
    -o LogLevel=quiet \
    -i identity_file \
    machine.example.org \
    gcc -dumpversion
Кайл Клёппер
источник
1
Добавление "LogLevel = quiet" в файл "config" сработало. Спасибо.
Дональд Тейлор
3
Для обеспечения безопасности было бы хорошо поместить «LogLevel = quiet» в раздел «Host».
Джо
39
LogLevel=quietэто плохая идея, он хочет, чтобы все ошибки отображались, он просто хочет избежать этой конкретной неприятной ошибки. Возможно, потому что он обманул ssh для использования /dev/nullв качестве known_hostsфайла, возможно потому, что он хотел отключить known_hostsпроверку отпечатков пальцев, но не смог, потому что повелители ssh не позволили ему.
Элазар Лейбович
@bukzor по- loglevel=errorпрежнему отображает «Соединение с <сервером> закрыто», когда соединение разорвано, что также очень раздражает для сценариев.
Guss
Я понизил это, поскольку это действительно не решает проблему. Это просто скрывает это.
Алабуди
60

Установите LogLevelв ERROR(не QUIET) в ~/.ssh/configфайле , чтобы не видеть эти ошибки:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
user1193229
источник
2
В моем случае это работало лучше всего - или вы можете указать «-oLogLevel = ERROR» в командной строке
Брэд
5

Это сообщение от SSH, которое предупреждает вас о том, что вы подключаетесь к хосту, к которому ранее никогда не подключались. Я бы не рекомендовал отключать его, поскольку это может означать, что вы можете пропустить предупреждение об изменении ключа хоста, что может указывать на атаку MITM в вашем сеансе SSH.

Джейсон Каррейро
источник
1
Но я подключаюсь к нему 10-15 раз каждый день, и все же получаю это предупреждение.
Дональд Тейлор
@JackB. Посмотрите ~/.ssh/known_hostsи посмотрите, есть ли там ваш хост.
Бореалид
Ключ меняется по какой-то причине? Проверьте отпечаток в файле против отпечатка, который выводится с помощью ssh. Кроме того, режим вашей директории .ssh установлен на 0700?
Джейсон Каррейро
2
@JasonCarreiro, я большой мальчик, я знаю, что никто не будет проводить атаку MITM в моей стойке, безопасность - это компромисс, и я хочу, чтобы новые компьютеры работали из коробки с предварительным ключом, без необходимости управлять ЦС или ssh-keyscan,
Элазар Лейбович
4

Для подавления предупреждающих сообщений sshвы можете добавить следующие строки ~/.ssh/config:

Host *
LogLevel error

Это отключит предупреждения, но не сообщения об ошибках. Как и другие настройки, ~/.ssh/configвы можете настроить их LogLevelотдельно для каждого хоста, если вы хотите более детализированный элемент управления.

Штефан Шмидт
источник
2

В основном это означает, что есть изменения для ключа для этого хоста ~/.ssh/known_hosts, и он не будет автоматически ОБНОВЛЯТЬ его. Поэтому каждый раз, когда вы получаете это предупреждение.

Это часто случается при подключении к воссозданным виртуальным машинам, который меняет ключ с тем же IP-адресом

Решение

Если у вас есть только одна запись, вы можете удалить ~/.ssh/known_hosts файл, и после первого подключения, что ключ будет там, и никаких предупреждений после этого.

Если у вас есть несколько записей, вы можете использовать команду ниже, чтобы удалить

$ ssh-keygen -R <hostname>

Он отлично работает для меня

Ларри Кай
источник
0

Если вы используете репозиторий из GitHub, рассмотрите вариант использования URL-адреса HTTPS , чтобы полностью обойти эту проблему:

Нажмите кнопку HTTP и клонируйте этот URL вместо

Если вы клонируете свой репозиторий из приложения Windows GitHub, это то, что он использует для удаленного URL. Может быть, они знают что-то, чего мы не знаем.

Ricket
источник
Примечание. Если вы используете аутентификацию с закрытым ключом, вы не можете использовать HTTP (S).
qwertzguy
0

У меня тот же вопрос, и я обнаружил, что нет .sshфайла в моем ~. Поэтому я просто создаю .sshкаталог под ~путем, и проблема решена.

Крис Руф
источник
0

Я попал в ту же проблему, когда начал использовать машину с Windows. В моем случае это было потому, что моя настройка SSH не была сделана. Github имеет очень точную документацию по настройке SSH. Как только это позаботилось, проблема была решена.

https://help.github.com/articles/checking-for-existing-ssh-keys/ https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it- к-SSH-агент /

Зина
источник
0

Добавить ключ SSH

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

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/bitbucket_rsa

файл конфигурации ящика

crate ~/.ssh/config

добавить строку ниже.

UserKnownHostsFile ~/.ssh/known_hosts

Затем добавьте ключ публикации и клонируйте свой репозиторий ... Готово .....

Thanuja
источник
0

Я столкнулся с той же ошибкой в ​​виртуальной машине Linux / Cent OS, и это произошло потому, что IP-адрес менялся после перезапуска. Чтобы обойти эту проблему, я определил статический IP-адрес в сети и добавил эту запись в файл / etc / hosts. Для статического IP упомяните немного более высокое значение диапазона. Например, если ваш текущий IP (ipconfig / ifconfig) равен 192.168.0.102, в следующий раз после перезапуска это может стать 192.168.0.103. Поэтому определите свой статический IP-адрес в настройках IPV4 как 192.168.0.181, что должно сработать.

Виньеш Менон
источник
постарайтесь выделить ключевые слова и четко определиться с форматом, который поможет донести ваш ответ до других
Agilanbu
0

В моем случае это произошло потому, что администратор, настроивший сервер, установил эти параметры в ~/.ssh/config

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

Который работал нормально для большинства случаев, не используя ~/.ssh/known_hostsфайл. Но для корпоративного репозитория gitlab каждый раз он давал «Предупреждение: постоянно добавлен ... в список известных хостов».

Моим решением было закомментировать UserKnownHostsFile /dev/nullстроку, которая позволила создание ~/.ssh/known_hosts. Тогда он не дал больше предупреждений после этого.

Вы также можете иметь старые / недействительные записи в вашем known_hosts.

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

# delete entry in ~/.ssh/known_hosts
ssh-keygen -R <hostname>
wisbucky
источник
0

добавьте свой закрытый ключ в ssh-agent с помощью:

ssh-add ~/.ssh/id_rsa
cromerou
источник
-1

Я забираю свое решение из-за продолжающихся падений голосов.
Это было лучшее решение без фактического взлома исходного кода самого клиента SSH.
Если кому-то интересно, проверьте историю редактирования.

Джон
источник