Git diz "Aviso: adicionado permanentemente à lista de hosts conhecidos"

192

Sempre que uso o git para interagir com um controle remoto, como puxar ou empurrar, é exibida a seguinte mensagem:

Aviso: Adicionado permanentemente '...' (RSA) à lista de hosts conhecidos.

Como posso impedir que essa mensagem irritante seja exibida? É apenas um aborrecimento - tudo funciona corretamente.

Donald Taylor
fonte
1
Você realmente quer dizer toda vez? Está lhe dando um aviso do formulário The authenticity of host '...' can't be established. RSA key fingerprint is .... Are you sure you want to continue connecting (yes/no)?ou você o suprimiu? Se for, é sempre a mesma impressão digital? Se não for, isso é realmente assustador . A opção menos assustadora seria que, de alguma forma, ele não está conseguindo gravar no arquivo hosts, por isso tenta novamente todas as vezes. Dê uma olhada ~/.ssh/known_hosts?
Cascabel
1
Sim. <i> Toda vez </i>. No entanto, não vejo a mensagem "Você tem certeza ..." - talvez eu a tenha suprimido.
22412 Donald Taylor
O host está listado em ~/.ssh/known_hosts? (Está listado 5000 vezes?) Existe ~/.ssh/config/ contém alguma coisa (especialmente um valor para StrictHostKeyChecking)?
Cascabel
O host é listado nesse arquivo uma vez e é a única entrada.
22712 Donald Taylor
2
Acho que o conteúdo do seu known_hostsarquivo está ruim. Deve ser a chave do host, em uma linha terrivelmente longa. Se você tiver apenas o nome do host (por exemplo), ele não funcionará. Eu recomendo que você remova esse arquivo (se ele contiver apenas as informações desse host único) e permita que o SSH o crie na próxima vez que você se conectar. Deve ficar em silêncio depois disso.
tripleee

Respostas:

240

Solução: crie um ~/.ssh/configarquivo e insira a linha:

UserKnownHostsFile ~/.ssh/known_hosts

Você verá a mensagem na próxima vez que acessar o Github, mas depois disso não a verá mais porque o host foi adicionado ao known_hostsarquivo. Isso corrige o problema, em vez de apenas ocultar a mensagem de log.

Esse problema estava me incomodando há algum tempo. O problema ocorre porque o cliente OpenSSH compilado para Windows não verifica o arquivo known_hosts em~/.ssh/known_hosts

ssh -vvvvvvvvvvvvvvvvvv [email protected]

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.
Jeremiah Gowdy
fonte
9
Sim, não considero suprimir avisos ou erros uma solução adequada para um problema. ;)
Jeremiah Gowdy 26/03
1
recentemente, enfrentei o mesmo problema na minha máquina ubuntu. Ele começou a se comportar dessa maneira depois que eu usei uma chave diferente (do meu padrão ~/.ssh/id_rsa) para conectar-me a um servidor. Como @JeremiahGowdy mencionou, eu tenho debug3: load_hostkeys: loading entries for host "172.16.3.101" from file "/dev/null". Por que o SSH começa a usar /dev/nullcomo known_hosts depois que eu mudei de chave?
precisa
6
Funciona bem! Finalmente o aviso estúpido parou. Entre no Windows, o ~in ~/.ssh/configé a pasta inicial do usuário. Para abri-lo facilmente, pressione Win-R , digite cmd Enter . O prompt de comando já deve abrir na sua pasta pessoal. Digite cd .ssh Enter e, em seguida, start . Enter para abrir a pasta no Windows Explorer. Em seguida, você pode criar o arquivo de configuração no bloco de notas (sem extensão .txt ao salvar). (Usuários profissionais podem ecoar diretamente para um novo arquivo no próprio prompt de comando ;)). Execute um comando git envolvendo o controle remoto duas vezes (como git fetch) e pronto.
ADTC
1
por que você tem 20 v's para ssh?
bubakazouba
3
@bubakazouba Quanto mais v, mais detalhado o log fica, verifique os documentos para isso. Três seriam suficientes, vinte são um exagero: D
Petr Mánek 01/10/16
90

Adicione a seguinte linha ao seu arquivo de configuração ssh ($ HOME / .ssh / config):

LogLevel=quiet

Se estiver executando o ssh a partir da linha de comandos, adicione a seguinte opção à cadeia de comandos:

-o LogLevel=quiet

Por exemplo, o seguinte imprime a versão do gcc instalada no machine.example.org (e sem aviso):

ssh -o UserKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no \
    -o LogLevel=quiet \
    -i identity_file \
    machine.example.org \
    gcc -dumpversion
Kyle Kloepper
fonte
1
Adicionando "LogLevel = quiet" ao arquivo "config" funcionou. Obrigado.
22712 Donald Taylor
3
Para manter a segurança, seria bom colocar o "LogLevel = quiet" dentro de uma seção "Host".
Joe
39
LogLevel=quieté uma má idéia, ele quer que todos os erros sejam exibidos, ele só quer evitar esse erro desagradável específico. Provavelmente porque ele enganou o ssh para usar /dev/nullcomo known_hostsarquivo, provavelmente porque ele queria desativar a known_hostsverificação de impressões digitais, mas não conseguiu, porque os senhores do ssh não permitiram.
Elazar Leibovich
O @bukzor loglevel=errorainda exibe "Conexão com <servidor> fechado" quando a conexão é encerrada, o que também é realmente irritante para scripts.
Guss
Eu diminuí a votação disso, pois realmente não resolve o problema. Apenas o esconde.
alaboudi
60

Defina LogLevelcomo ERROR(não QUIET) no ~/.ssh/configarquivo para evitar a visualização desses erros:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
user1193229
fonte
2
Isso funcionou melhor no meu caso - ou você pode especificar "-oLogLevel = ERROR" na linha de comando
Brad
5

Essa mensagem é do SSH, que avisa que você está se conectando a um host ao qual você nunca se conectou antes. Eu não recomendaria desativá-lo, pois isso significa que você pode perder um aviso sobre uma alteração na chave do host, o que pode indicar um ataque MITM na sua sessão SSH.

Jason Carreiro
fonte
1
Mas eu me conecto a ele 10 a 15 vezes por dia e ainda recebo esse aviso.
22712 Donald Taylor
@JackB. Olhe ~/.ssh/known_hostse veja se o seu host está lá.
Borealid 15/02/12
A chave está mudando por algum motivo? Verifique a impressão digital no arquivo versus a impressão digital emitida pelo ssh. Além disso, o modo do seu diretório .ssh está definido como 0700?
Jason Carreiro
2
@ JasonCarreiro, eu sou um garoto grande, sei que ninguém puxará o ataque MITM dentro do meu rack, a segurança é uma desvantagem e quero que novos computadores funcionem imediatamente com a chave pré-compartilhada, sem a necessidade de gerenciar uma autoridade de certificação ou ssh-keyscan.
Elazar Leibovich
4

Para suprimir mensagens de aviso, sshvocê pode adicionar as seguintes linhas a ~/.ssh/config:

Host *
LogLevel error

Isso desativará avisos, mas não mensagens de erro. Assim como as outras configurações, ~/.ssh/configvocê pode configurar o LogLevelhost por host, se desejar um controle mais detalhado.

Stefan Schmidt
fonte
2

Significa principalmente que há alterações na chave para esse host ~/.ssh/known_hostse não a atualiza automaticamente. Portanto, toda vez que você receber essa mensagem de aviso.

Isso acontece frequentemente para a conexão com as máquinas virtuais recriadas, que alteram a chave com o mesmo endereço IP

Solução

Se você tiver apenas uma entrada, poderá excluir o ~/.ssh/known_hostsarquivo e, após a primeira conexão, a chave estará lá e nenhuma mensagem de aviso depois disso.

Se você tiver várias entradas, poderá usar o comando abaixo para remover

$ ssh-keygen -R <hostname>

Isso funciona bem para mim

Larry Cai
fonte
0

Se você estiver usando um repositório do GitHub, considere usar a versão HTTPS da URL, para evitar esse problema completamente:

Clique no botão HTTP e clone esse URL.

Se você clonar seu repositório no aplicativo Windows GitHub, é isso que ele usa para o URL remoto. Talvez eles saibam algo que não sabemos.

Ricket
fonte
Nota: Se você usar autenticação de chave privada, não poderá usar HTTP (S).
precisa saber é o seguinte
0

Tenho a mesma pergunta e descobri que não há um .ssharquivo no meu ~. Então, eu apenas crio o .sshdiretório no ~caminho, e o problema foi resolvido.

Kris Roofe
fonte
0

Adicionar chave ssh

ssh-keygen -t rsa -b 4096 -C "[email protected]"

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/bitbucket_rsa

arquivo de configuração da caixa

crate ~/.ssh/config

adicione abaixo da linha.

UserKnownHostsFile ~/.ssh/known_hosts

Em seguida, adicione a chave pub e clone seu repositório ... Concluído .....

Thanuja
fonte
0

Eu havia enfrentado o mesmo erro na máquina virtual Linux / Cent OS e era porque o IP estava mudando após a reinicialização. Para contornar esse problema, defini um IP estático na rede e adicionei essa entrada ao arquivo / etc / hosts. Para IP estático, mencione um valor de intervalo um pouco maior. Por exemplo, se o seu IP atual (ipconfig / ifconfig) for 192.168.0.102, na próxima vez após a reinicialização, este poderá se tornar 192.168.0.103. Portanto, defina seu IP estático nas configurações de IPV4 como 192.168.0.181, o que deve fazer o truque.

Vignesh Menon
fonte
tentar destacar as palavras-chave e ser claro com o formato que irá ajudar a alcançar a sua resposta para os outros
Agilanbu
0

No meu caso, foi porque o administrador que configurou o servidor definiu essas opções em ~/.ssh/config

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

O que funcionou bem na maioria dos casos, não usando o ~/.ssh/known_hostsarquivo. Mas para o repositório corporativo do gitlab, toda vez que ele dava o "Aviso: adicionado permanentemente ... à lista de hosts conhecidos".

Minha solução foi comentar a UserKnownHostsFile /dev/nulllinha, o que permitiu a criação de ~/.ssh/known_hosts. Então não deu mais avisos depois disso.

Você também pode ter entradas antigas / inválidas no seu known_hosts.

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

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

Estou retirando minha solução devido a contínuos downvotes.
Era a melhor solução sem realmente invadir o código fonte do próprio cliente SSH.
Se alguém estiver interessado, verifique o histórico de edições.

John
fonte