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 )
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.
fonte
Você pode / deve usar
ssh-keyscan
para 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.A chave será diferente para cada host.
Então, algo assim fará a bola rolar.
fonte