Como fazer o ssh corresponder a known_hosts ao host / ip: port em vez de apenas host / ip?

5

Eu tenho duas máquinas atrás de um firewall, com as portas ssh encaminhadas para 2201 e 2202.

Quando eu

ssh host -p 2201  

ele pergunta se eu confio na máquina, digo sim, ela é adicionada em ~ / .ssh / known_hosts

Então eu

ssh host -p 2202  

Não me deixa, porque já existe uma entrada para este IP em ~/.ssh/known_host:1 (o arquivo estava vazio quando eu comecei, então a linha 1 é aquela adicionada pela execução ssh anterior).

Isso acontece no CentOS 5.4.

Em outras distros (eu tentei o Arch), parece que o ssh combina o known_hosts com as portas também, então eu posso ter várias impressões digitais para várias portas no mesmo host / ip sem nenhum problema.

Como posso obter esse mesmo comportamento para o CentOS?

Não encontrei nada em man ssh_config (ou pelo menos não sem desativar a verificação de impressões digitais).

Eu encontrei uma solução temporária. Se o arquivo known_hosts tiver mais de uma entrada para o mesmo IP, ele verificará todos eles antes de concluir que algo está errado. Mas eu realmente odiaria que isso fosse a solução.

    
por Prody 13.05.2010 / 17:35

4 respostas

5

A versão do OpenSSH que vem com o CentOS 5 não suporta números de porta em known_hosts . Você precisará criar e instalar uma versão mais recente se quiser que isso funcione.

    
por 13.05.2010 / 18:02
5

~/.ssh/config :

Host foohost-2201
    Hostname foohost.domain.tld
    # This should comply with the format used in OpenSSH 5.
    HostkeyAlias "[foohost.domain.tld]:2201"
    User username
    Port 2201

E sério, atualize.

    
por 13.05.2010 / 22:20
4

Use isto se o seu cliente openssh não suportar entradas baseadas em host + porta:

A diretiva 'GlobalKnownHostsFile' pode ser usada incorretamente para apontar para um arquivo diferente para cada uma das suas duas máquinas com firewall (aqui Alice e Bob). No entanto, esses dois arquivos devem ser preparados com chaves de host corretas de alice ou bob antecipadamente, pois eles não são gravados quando aceitam chaves desconhecidas.

Não é muito divertido de configurar, mas depois de concluído, funciona.

Minha solução anterior antes disso era 'StrictHostKeyChecking no', que não permitia que o ssh-agent enviasse chaves nem enviasse as portas (bloqueadas pelo openssh quando usadas).

Meu arquivo .ssh / config ficou assim até recentemente:

Host hoppingstation
        Hostname loginhost.somewhere.net
        User me
        LocalForward 2201 alice.somewhere.net:22
        LocalForward 2202 bob.somewhere.net:22
Host alice
        Hostname localhost
        Port 2201
        User root
        ForwardAgent yes
        GlobalKnownHostsFile /home/me/.ssh/known_hosts_alice
Host bob
        Hostname localhost
        Port 2202
        User root
        ForwardAgent yes
        GlobalKnownHostsFile /home/me/.ssh/known_hosts_bob
    
por 23.11.2010 / 23:33
1

minha solução; adicionar informações detalhadas do host a ~/.ssh/config :

Host <someidentifier>
    Hostname ip.add.re.ss
    StrictHostKeyChecking no
    User username
    Port 2201

Host <someotheridentifier>
    Hostname ip.add.re.ss
    StrictHostKeyChecking no
    User username
    Port 2202

então você pode fazer ssh someidentifier sem precisar fornecer -p etc.

    
por 13.05.2010 / 18:20