Desculpe, tenho medo de que a única maneira de alterar esse texto é modificar o código-fonte e compilar o ssh manualmente.
Estou implantando um script que é executado em vários clientes por trás de firewalls que eu não controle. O script tenta um logon de 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 22 para um servidor diferente (sysadmins nas várias instalações parecem ter feito isso para seus próprios propósitos).
Nestes 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, quero executar o comando
telnet my-remote-host 22
Do 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 da faixa do OpenSSH para o meu servidor (que seria inacessível em tais situações)
Como controlo este texto? - Assim, posso inserir um token que identifique o meu próprio servidor como o que está a ser pingado nesta situação. Os servidores de datacenter que aceitam as solicitações da porta 22 podem ter a mesma versão exata do OpenSSH sendo executado como meu próprio servidor remoto.
(Atualmente meu diagnóstico está apenas relatando um login com falha, mas há outros motivos pelos quais isso pode acontecer - estou procurando um diagnóstico mais refinado que possa testar se meu servidor está realmente acessível na porta 22 antes de tentar um login real)
Você está errado! A única maneira de determinar se você está alcançando o servidor 'bom' é verificando a impressão digital da sua chave. Dê uma olhada na página de manual 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 este banner. Seu conteúdo é definido na especificação do protocolo e sua alteração pode impedir que seus clientes se conectem.
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 fazer as pessoas ficarem quentes debaixo do colarinho!). Se você pegar a chave e ela coincidir com o que você sabe que a chave deve ser, o host está ativo e escutando na porta 22 sem que você tenha que efetuar login. Isso evita que você recompile seus pacotes ssh toda vez que uma nova versão for lançada. / p>
$ 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 vai dar o pontapé de saída.
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