Eu tenho um servidor shell em um sistema embarcado (é um sistema ARMel de 32 bits). Quando vou fazer o login, eu uso:
$ ssh root@ip
Unable to negotiate with ip port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
Então pensei, ok, darei a ele um dos tipos de cifra esperados com a -c
opção:
$ ssh -c ssh-dss root@ip
Unknown cipher type 'ssh-dss'
ou:
$ ssh -c ssh-rsa root@ip
Unknown cipher type 'ssh-rsa'
Portanto, não tenho certeza do que fazer a seguir. Eu tenho um console serial UART para o qual posso enviar comandos, mas prefiro estar no SSH. Eu sei que está executando o serviço, mas não sei como fazer login nele.
Eu vejo muito isso com os sistemas integrados legados da Cisco cujo firmware não pode mais ser atualizado para os padrões ssh modernos.
Além do algoritmo de chave do host, você pode precisar usar um algoritmo de troca de chave obsoleto e/ou especificação de cifra também.
Exemplo de Bash:
A boa notícia é que o OpenSSH (o que eu uso) geralmente me diz quais algoritmos ou cifras estão sendo oferecidos - caso contrário, posso ter que fazer muitas tentativas e erros.
Se eu fizer isso, os protocolos disponíveis podem ser listados no OpenSSH com:
Atualização: Como parece haver muito interesse em fazer isso usando ssh_config (obrigado, Bob,Z,et al), fornecerei um exemplo para esse método:
Como esses protocolos foram obsoletos por motivos de segurança, você deve restringir o uso padrão com uma qualificação "Host" ou "Match" para que sejam usados apenas nos destinos herdados que os exigem.
Da mesma forma, você deve evitar colocar essas exceções em /etc/ssh/ssh_config ou em /etc/ssh/ssh_config.d/ , a menos que sua intenção seja fazer com que todos os usuários atuais e futuros as utilizem por padrão.
Para todos os detalhes corajosos, consulte:
Tente usar isso:
Notas:
Também depende do que você está executando em sua própria máquina. Se você estiver executando algo como Arch ou Fedora36+, que está no OpenSSL3.0, os algoritmos mais antigos foram obsoletos ou desativados. Eu tive que incluir esta configuração dentro da minha configuração ssh estando no 3.0 conectando-se a servidores mais antigos:
Um truque legal, que funciona a partir de agora e pode ajudar na compatibilidade com versões anteriores se os algoritmos forem removidos do OpenSSH, é usar um contêiner de uma imagem de distribuição Linux mais antiga.
Há mais sobrecarga (embora o contêiner possa ser mantido ao custo de algumas dezenas de MB) e com possíveis riscos de segurança (possivelmente versões OpenSSH não mantidas) que podem ou não ser aceitáveis.
Aqui está um one-liner, com suas próprias limitações:
docker run --rm -it debian:jessie sh -c 'apt-get update && apt install -y --force-yes openssh-client && ssh the_host