Como alterar uma chave de host SSH?

23

Clonei um servidor e eles têm a mesma impressão digital de chave RSA.

Parece estar definido em /etc/ssh/ssh_host_rsa_key.pub.

Qual é a maneira correta de mudar isso?

Obrigado.

Pascal Polleunus
fonte

Respostas:

23

Ou remova as chaves e

ssh-keygen -A

Explicação:

-A: Para cada um dos tipos de chave (rsa1, rsa, dsa, ecdsa e ed25519) para os quais as chaves do host não existem, gere as chaves do host com o caminho padrão do arquivo de chaves, uma senha vazia, senhas padrão, bits padrão para o tipo de chave e padrão Comente. Isso é usado pelo / etc / rc para gerar novas chaves de host.

philippe
fonte
As tags do OP especificam debian, mas como não são específicas da plataforma, esta resposta parece ser a melhor solução.
mc0e
Hmm, exceto que parece não funcionar para versões mais antigas. Por exemplo, falha em apertar debian, que tem OpenSSH_5.5p1
mc0e
1
Para sua informação (em manpagez.com/man/1/ssh-keygen ), ssh-keygen -Afaça o seguinte: "Para cada um dos tipos de chave (rsa1, rsa, dsa, ecdsa e ed25519) para os quais não existem chaves de host, gere o host chaves com o caminho padrão do arquivo de chaves, uma senha vazia, bits padrão para o tipo de chave e comentário padrão. Isso é usado pelo / etc / rc para gerar novas chaves do host. "
Rabarberski
19

Siga estas etapas para gerar novamente as chaves do host OpenSSH

  1. Exclua as chaves antigas do host ssh: rm /etc/ssh/ssh_host_*
  2. Reconfigure o servidor OpenSSH: dpkg-reconfigure openssh-server
  3. Atualizar todos os ~/.ssh/known_hostsarquivos do (s) cliente (s)

Referência

Pascal Polleunus
fonte
8

Para um método genérico de fazer isso:

ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key

ssh-keygen -q -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key

ssh-keygen -q -N "" -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key

misture e combine de acordo com as chaves que sua versão do OpenSSH suporta.

Olipro
fonte
1
Eu acho que uma maneira de melhorar essa questão seria adicionar a maneira de aumentar o número de bits. isto é,ssh-keygen -q -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key
WhiteCat
0

Exclua-os e reinicie o serviço SSHd. Eles serão regenerados.

Heis Spiter
fonte
1
Não, não funciona. /etc/init.d/ssh restart<newline> Could not load host key: /etc/ssh/ssh_host_rsa_key<newline> Could not load host key: /etc/ssh/ssh_host_dsa_key<newline> [....] Restarting OpenBSD Secure Shell server: sshdCould not load host key: /etc/ssh/ssh_host_rsa_key<newline> Could not load host key: /etc/ssh/ssh_host_dsa_key
Pascal Polleunus
1
De fato. Funciona apenas em distribs baseados em RHEL. Desculpe
Heis Spiter
Bons conselhos, obrigado. Funcionou para mim na instalação do CentOS.
George Gaál
Definitivamente funciona no Fedora
David Tonhofer 12/08/16
0

Script (no caso de reiniciar o daemon sshd não regenerar automaticamente as chaves)

#!/bin/bash

# Regenerate SSHD key materials, restart sshd if "-r" passed on command line

set -o nounset

WHERE=/etc/ssh

# go to directory

pushd $WHERE >/dev/null

if [[ $? != 0 ]]; then
   echo "Could not cd to $WHERE -- exiting" >&2
   exit 1
fi

# create backup folder

NOW=`date '+%Y%m%d.%H%M%S'` # default NOW string
BAKDIR=bak_$NOW

mkdir $BAKDIR

if [[ $? != 0 ]]; then
   echo "Could not mkdir $BAKDIR -- exiting" >&2
   exit 1
fi

# move existing key material to backup folder

mv ssh_host_* $BAKDIR

if [[ $? != 0 ]]; then
   echo "Could not move old files to $BAKDIR -- exiting" >&2
   exit 1
fi

# generate new keys

ssh-keygen -A

if [[ $? != 0 ]]; then
   echo "Could not recreate keys -- exiting" >&2
   exit 1
fi

# ssh-keygen may create DSA keys but:
# "Never use DSA or ECDSA"
# http://security.stackexchange.com/questions/5096/rsa-vs-dsa-for-ssh-authentication-keys

/bin/rm -f *_dsa_key *_dsa_key.pub
/bin/rm -f *_ecdsa_key *_ecdsa_key.pub

# on Fedora, one has to tune permissions a bit

chmod 640 *_key
chgrp ssh_keys *_key

# make sure SELinux attributes are as they should be

restorecon -R $WHERE

# Done

echo "New key material"
ls -l *_key *_key.pub

# Do the risky thing

if [[ $1 == '-r' ]]; then
   echo "Restarting SSH daemon"
   systemctl restart sshd
fi

# go back to where you where

popd >/dev/null
David Tonhofer
fonte
O link no seu comentário não diz que o ECDSA não deve ser usado.
Todd Walton
@ToddWalton Na verdade, sim. Terceira resposta em sequência: "- Nunca use DSA ou ECDSA. - Ed25519 é provavelmente o mais forte matematicamente (e também o mais rápido), mas ainda não é amplamente suportado. Como bônus, possui uma criptografia mais forte (proteção por senha) da chave privada por padrão, que outros tipos de chave. - O RSA é a melhor aposta se você não puder usar o Ed25519. "
David Tonhofer 20/03
Ah, você está certo. Eu vejo agora.
Todd Walton