Confie no servidor SSH com base na chave em vez de se a chave + o IP corresponderem

8

É possível fazer o cliente ssh não se importar com o IP que um servidor ssh está atrás (e se um servidor diferente estava atrás desse IP anteriormente), mas confiar em chaves específicas do servidor? (E talvez apelidar essas chaves?) Uso DNS dinâmico e tenho extensões de privacidade IPv6 ativadas em alguns computadores e sempre me perguntam se acha seguro conectar-se. Outra possibilidade são os endereços atribuídos pelo DHCP, atribuídos a diferentes servidores ssh, causando todos os tipos de erros de 'chave não corresponde ao IP'.

Azendale
fonte
Eu provavelmente também deveria ter mencionado que tenho uma lista de chaves públicas para cada servidor ssh em uma página da web que é servida por SSL, portanto, tenho uma maneira fácil de verificar se realmente confio em um conjunto de chaves de servidor específico.
Azendale

Respostas:

7

Adicione um apelido ao seu servidor ~/.ssh/confige desative-o CheckHostIP.

Host nickname
HostName example.dyndns.org
CheckHostIP no

Antes de conectar-se ao servidor pela primeira vez, você pode copiar a chave pública fora da banda: pegue /etc/ssh/ssh_host_rsa_key.pubdo servidor, remova a root@hostnameparte no final da linha, adicione example.dyndns.orgno início e acrescente a linha a ~/.ssh/known_hosts. Opcionalmente, execute o ssh-keygen -Hhash do nome do host (isso só é útil se você estiver preocupado com a privacidade dessa entrada se alguém roubar seu disco rígido ou seus backups, o que para 99,99% das pessoas é inútil porque as informações estão presentes em outras localidades próximas. localização de qualquer maneira).

Gilles 'SO- parar de ser mau'
fonte
Com o Host nickname, isso significa que eu posso fazer ssh nicknameisso? Se assim for, isso é muito legal.
Azendale
@ Azendale: Exatamente, é uma característica geral atribuir um apelido a um nome de host e um conjunto de opções (nome de usuário, opções booleanas, túneis, ...).
Gilles 'SO- stop be evil'
2

Em /etc/ssh/ssh_configadicionar a linha

CheckHostIP no

No entanto, isso tira um pouco do Secure in SSH, porque qualquer máquina pode se esconder atrás do nome de IP ou DynDNS ao qual você se conecta.

htorque
fonte
11
Isso não tira nenhuma segurança. O objetivo de armazenar a chave do host é identificar o outro computador. O nome e o endereço IP não são relevantes para segurança quando você possui a chave do host. Remover as mensagens falsas é, de fato, um ganho de segurança (as mensagens falsas consomem sua atenção, o que é um recurso escasso).
Gilles 'SO- parar de ser mau'
11
@Gilles: A página de manual discorda. Sim, você não perde nenhuma segurança para conexões em que não há uma relação IP-host conhecida, em outros casos, você desiste da proteção contra ataques de falsificação de DNS (conforme indicado na página de manual).
htorque
Não sei a que passagem da página de manual você está se referindo. Se é a descrição de CheckHostIP, então não, não diz que você desiste de qualquer proteção. Com isso CheckHostIP no, o spoofer ainda precisa obter a chave privada do servidor e, se ele puder fazer isso, é improvável que também não consiga falsificar seu endereço IP.
Gilles 'SO- parar de ser mau'
Você pode me dar um exemplo de como a falsificação de DNS seria perigosa se eu souber que confio na chave? Uso a autenticação de chave pública para fazer login, o que faz com que um servidor mal-intencionado não consiga obter uma senha, mas e se eu usasse senhas?
Azendale 14/06
O uso da autenticação de chave pública realmente não protege sua senha, o servidor pode enviar um MITM e obter sua senha quando você sudoou similar.
Remram