Solução
Modifique ou adicione manualmente entradas de host conhecidas para cada chave de host com o nome / campo de IP definido como *
.
Explicação
Acontece que há dois detalhes pouco conhecidos do formato de arquivo de hosts conhecidos do OpenSSH (documentado, por algum motivo, na página de manual sshd
, em vez da página de manual ssh
, sob o SSH_KNOWN_HOSTS_FILE_FORMAT seção), que fornece exatamente o comportamento que eu quero:
-
O OpenSSH permite curingas no campo nome / IP do host , para que vários (ou mesmo todos) hosts correspondam a uma determinada chave pública.
-
O OpenSSH permite mais de uma entrada de host conhecida para o mesmo host e verifica todos eles, de modo que várias chaves de host podem ser consideradas válidas para o mesmo host.
A combinação dessas duas coisas permite que você adicione qualquer número de chaves de host consideradas válidas para qualquer host ao qual você se conecta, aproveitando ao mesmo tempo a verificação rigorosa da chave do host.
Isso funciona se você tem ou não HashKnownHosts
ativado - se estiver modificando uma entrada em hash existente, você apenas substituirá o primeiro campo (delimitado por espaço) na entrada. Se você executar ssh-keygen -H
você fazer obter um aviso de que as entradas de caractere curinga não podem ser criptografadas, mas tudo bem: o ponto inteiro desse hashing é ocultar os hosts aos quais você se conecta caso o conteúdo do arquivo seja exposto mas um curinga *
da mesma forma não revela hosts específicos.
Advertência de segurança
Eu estava errado na minha pergunta para dizer que não há nenhuma perda de segurança. Há um risco adicional pequeno, mas real: Se uma ou mais chaves do host forem consideradas válidas para vários hosts, então, se qualquer dessas chaves do host estiver comprometida, todas de suas conexões pode ser MitMed pela chave comprometida.
Para algumas pessoas, esse será um risco aceitável, que vale a conveniência extra, na conveniência usual versus trade-off de segurança.
Mas com um pouco de configuração extra, isso pode ser reduzido a um nível razoavelmente indolor por ter um arquivo de hosts conhecidos para cada host "roaming", armazenando apenas a entrada de chave de host com caractere curinga do host, um arquivo de configuração para cada aqueles que especificam que os hosts conhecidos arquivam com a opção UserKnownHosts
file e especificam esse arquivo de configuração com a opção -F
ao se conectar.