Como forçar o SSH a fornecer uma chave RSA em vez da ECDSA?


16

Ao acessar um servidor pela primeira vez, como posso forçar o SSH a fornecer a chave RSA e armazená-la automaticamente se o usuário aprovar?

Atualmente, ele está me oferecendo a chave da ECDSA. Como eu já conheço a chave RSA, prefiro ver a chave RSA apresentada neste momento.

Eu tentei:

ssh -o RSAAuthentication=yes user@server

Infelizmente, isso me dá uma chave ECDSA e a Are you sure you want to continue connecting (yes/no)?mensagem.


Eu tenho uma situação parecida. Servidor A. Cliente B. Em B: ssh A primeiro solicitará a chave. No Cleint C: o ssh A pedirá sua senha primeiro, após uma falha na tentativa de o Cliente C usar a chave ECDSA, vi isso no log de A. Se eu pré-carregar a chave rsa em C, o ssh A se conectará com facilidade . Como impedir que C use a chave ECDSA como primeira tentativa?
Kemin Zhou

Respostas:


14

Removendo os algoritmos ECDSA da HostKeyAlgorithmsvariável de configuração.

ssh -o HostKeyAlgorithms=ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss user@server

Eu simplesmente removi todos os algoritmos ECDSA da lista padrão .

Você pode, é claro, colocar isso no seu .ssh/configpara essa máquina:

Host: server
    HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss

Para o OpenSSL, 1) não há dois pontos após o host e 2) a lista padrão parece ter sido alterada desde que você publicou isso. Tente em HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-rsavez disso.
cowlinator

6

Não use o RSA, pois o ECDSA é o novo padrão.

No servidor, faça o seguinte: ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub e registre esse número.

No cliente, você pode fazer o SSH para o host e, se e quando vir o mesmo número, poderá responder Are you sure you want to continue connecting (yes/no)?afirmativamente ao prompt . Em seguida, a chave ECDSA será gravada no cliente para uso futuro.


3
Sim, mas e se eu tiver um aplicativo antigo que precise do RSA para manter a compatibilidade até que haja uma decisão comercial de atualizar para o ecdsa?
enthusiasticgeek

@RobertSiemer apenas o pôster da pergunta original pode alterar a resposta aceita. Eu sou incapaz de fazê-lo.
entusiasticgeek

11
H2ONaCl: altere sua resposta aceita. Este não faz o que você pediu. @enthusiasticgeek desculpe, confusão.
Robert Siemer

Padrão (apelo à autoridade) e novo (apelo à novidade) não significa necessariamente melhor. O RSA ainda é considerado forte ... suba para 4096 se você quiser mais força (2048 pode ser obsoleto em breve). E se você deseja um bom EC, use ed25519. O ECDSA é péssimo porque usa curvas fracas do NIST, que podem até estar em backdoor; esse tem sido um problema bem conhecido há algum tempo. Portanto, para suporte legado, ative o RSA e, para um algo ideal, use ed25519 ... sempre desative o DSA, que é obsoleto por muito tempo (um dos principais motivos é a chave de tamanho fixo de 1024 bits) e também desativa o ECDSA. Tente ssh-audit para mais.
Peter

5

Sim, OK mude para ECDSA em breve, mas enquanto isso, tente o seguinte:

ssh -o HostKeyAlgorithms=ssh-rsa -o FingerprintHash=md5 user@example.com

Isso fornece "Opção de configuração incorreta: fingerprinthash" no meu sistema (OpenSSH_6.6.1p1).
Soren Bjornstad 5/11

11
@SorenBjornstad, a FingerprintHashopção é desnecessária, deixe essa parte toda de lado.
Lucas

2

Acabei de adicionar esta linha

HostKeyAlgorithms ssh-rsa

para

/etc/ssh/sshd_conf

e está funcionando bem nesta versão.

OpenSSH_7.7p2 ubuntu-4ubuntu2.2

1

Apenas para melhorar a resposta do tumbleweed, que possui um link morto para encontrar a lista antiga de algoritmos.

Primeiro, decida uma lista de algoritmos. Para encontrar a lista antiga, usessh -vv :

ssh -vv somehost

E procure as 2 linhas como "algoritmos de chave do host: ...", onde a primeira parece ser a oferta do servidor e a segunda é a do cliente. Ou, para escolher essas duas linhas automaticamente, tente o seguinte (e para sair, pressione ctrl + d):

ssh -vv somehost 2>&1 | grep "host key algorithms:"

Agora filtre para baixo ... você deve remover todos os dss / dsa, pois eles são obsoletos há muito tempo, e você também queria remover o ecdsa (como eu), por exemplo, se você tivesse:

ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Você deve terminar com:

ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Agora edite sua configuração. Para sua própria configuração:

vim ~/.ssh/config

Para a configuração em todo o sistema:

sudo vim /etc/ssh/ssh_config

Adicione uma nova linha, globalmente:

HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

ou para um host específico (não ideal para a configuração em todo o servidor):

Host somehost
    HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Em vez da lista que eu inseri, cole a lista que você derivou da ssh -vvsaída, sem incluir a parte "algoritmos de chave do host:".


0

alguns pontos são confusos quanto à possibilidade de remover algoritmos de chave dos padrões existentes - As chaves de nível mais alto são as novas chaves RSA-sha2 / 256/512 e ed25519 para melhor segurança usando ssh-keygen -t ras -a -b 4096 -a 113 para gen. Aparentemente, o suporte ao legado está lendo as notícias ssh de que o ssh1 desapareceu totalmente - suas chaves max - dsa de 45 bits e 96 bits também depreciadas também serão eliminadas. Foi corrigido no máximo de 128/1024 bits, encontrado hackável. (poss NSA fez isso e lame / desculpe como código de depuração deixou incerto a dúvida de que o nome era heartbleed); portanto, todas as estruturas de chave RSA seguras e de alto custo que precisam ser retrabalhadas para dar suporte e manter padrões mais elevados no futuro. defina quais chaves você deseja usar, conforme descrito em / etc / ssh / sshd_config, tente executar 2 chaves auth 3 também funciona, isto é: sshd_config "AuthenticationMethods publickey, publickey, publickey" - certifique-se de que as listagens ssh -Q kex correspondam aos servidores ou desktops A e B, como exemplo, podem diferir em sua saída - e verifique se os mesmos algoritmos de exibição de chaves correspondem. As chaves ecdsa mais recentes em produção também são muito boas para não usar. ou get - keyexchange recusou o acesso parcial msg segura. Muita informação boa apenas paciente para procurá-lo.


2
Você poderia tentar quebrar esse muro de texto para ficar mais fácil de seguir? Por favor, use o guia de formatação e o código do formato e o conteúdo do arquivo de texto como código e, se isso tornar as coisas mais claras, coloque-as em suas próprias linhas. Ficaria feliz em editar sua resposta se pudesse segui-la, mas não posso.
Zanna

-5

Ou, se você insistir em ter a abordagem de chave RSA, digite ssh-keygen -t rsa no servidor ao qual pretende fazer o SSH.

Isso deve gerar chaves públicas e privadas RSA em '~ / .ssh / id_rsa'. Agora tudo o que você precisa fazer é copiar a chave pública em$HOME/.ssh/authorized_keys todas as máquinas das quais você pretende ssh na máquina na qual você gerou suas chaves RSA.

E então sente-se e relaxe!


11
Você percebe que a pergunta não era sobre a chave do lado do cliente, mas sobre a chave do servidor?
0xC0000022L
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.