Como alterar o texto do banner OpenSSH ao testar a porta via telnet


1

Estou implantando um script que é executado em vários clientes atrás de firewalls que não controlo. O script tenta um login do cliente SSH em um servidor remoto que eu controle (o script vem pré-carregado com uma chave privada para autenticação). Alguns dos firewalls em alguns datacenters redirecionam as solicitações da porta ALL OUTBOUND 22 para um servidor diferente (os administradores de sistemas nas várias instalações parecem ter feito isso para seus próprios propósitos).

Nesses casos, o script falha (porque o login do cliente ssh falha). O script possui um recurso de diagnóstico que testa as conexões do usuário. Para poder determinar se meu servidor remoto está acessível a partir de sua estação de trabalho na porta 22, desejo executar o comando

telnet my-remote-host 22

No meu script, e teste a resposta. Meu servidor de destino responde:

SSH-2.0-OpenSSH_4.3

Meu servidor de desenvolvimento local responde:

SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4

NOTA: Estas são as respostas telnet na porta 22, não o texto do banner OpenSSH para o meu servidor (o que seria inacessível em tais situações)

Como faço para controlar este texto? - Para que eu possa inserir um token que identifique meu próprio servidor como aquele que está sendo executado ping nesta situação. Os servidores do datacenter que aceitam as solicitações da porta 22 podem ter exatamente a mesma versão do OpenSSH sendo executada neles como meu próprio servidor remoto.

(Atualmente, meus diagnósticos estão apenas relatando falha no login, mas há outros motivos pelos quais isso pode acontecer - estou procurando um diagnóstico mais refinado que possa testar para ver se meu servidor está realmente acessível na porta 22 antes de tentar um login real )

Respostas:


1

Desculpe, receio que a única maneira de alterar esse texto seja modificar o código fonte e compilar o ssh manualmente.


Eu pensei que poderia ser o caso. Encontrei a linha que já é responsável na fonte e vai seguir esse caminho. Obrigado.
Rwired

De nada. Enquanto você está nisso, por que não para corrigir OpenSSH um pouco e adicionar um novo parâmetro ajustável permitindo que se possa mudar essa bandeira versão à vontade ... ;-)
Janne Pikkarainen

2

Você está fazendo errado! A única maneira de determinar se você está alcançando o servidor 'bom' é verificando a impressão digital de sua chave. Dê uma olhada na página de manual do ssh_config (5) . O parâmetro que você está procurando deve ser ' StrictHostKeyChecking '

E, a propósito, não faça coisas estúpidas com esse banner. Seu conteúdo é definido na especificação do protocolo e alterá-lo pode impedir que seus clientes se conectem.


2

Você pode / deve usar ssh-keyscanpara reunir e comparar a chave pública do seu host. Eu imagino que é mais difícil fingir do que mudar o banner (o que, como você pode ver em outras respostas, tende a deixar as pessoas muito excitadas!). Se você obtiver a chave e ela corresponder ao que você sabia que deveria ser, o host estará ativo e escutando na porta 22 sem que você precise fazer login. Isso evita que você recompile seus pacotes ssh toda vez que uma nova versão for lançada.

    $ ssh-keyscan localhost
# localhost SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4
localhost ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA5qXqsZ4S/e4ANfQraXbJx9muKgdrPWrwI/SrIbnZLso9Poszmt3+NrBbTYkuZR92a6BL2gDXCdG0ugsY01u6xItKnnB0XZLYkSqqqwoGubqWbGfC5Zxsosne9cCevVNl3aomSNf8ctw+rEdBfrWjom6wu0CTy1umbDkT186l9LDoefzeOqSpPyIQBHZcDPeeY0B8vPyTCsC5ly/hwoQb/3nT5QMRaawlHNKJMgDE3avTUsPdtVjG2V55rpJpIDeBid7icMwxbGqTAS9T3hW111BdGGjaXspk1t23FnZOUQTzfI4kXj3SxUjSHIx6czX9SZ9NMa/7VewtJPVxRuPLGw==

A chave será diferente para cada host.

Então, algo assim fará a bola rolar.

key=$(ssh-keyscan localhost)

known_key="localhost ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA5qXqsZ4S/e4ANfQraXbJx9muKgdrPWrwI/SrIbnZLso9Poszmt3+NrBbTYkuZR92a6BL2gDXCdG0ugsY01u6xItKnnB0XZLYkSqqqwoGubqWbGfC5Zxsosne9cCevVNl3aomSNf8ctw+rEdBfrWjom6wu0CTy1umbDkT186l9LDoegzeOqSpPyIQBHZcDPeeY0B8vPyTCsC5ly/hwoQb/3nT5QMRaawlHNKJMgDE3avTUsPdtVjG2V55rpJpIDeBid7icMwxbGqTAS9T3hW111BdGGjaXspk1t23FnZOUQTzfI4kXj3SxUjSHIx6czX9SZ9NMa/7VewtJPVxRuPLGw=="

echo "($key)"
echo "-------"
echo "($known_key)"

if [[ "$key" = $known_key ]]; then
   echo "GOOD host key matches known key"
else
   echo "ERROR host key does not match known key"
fi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.