Как изменить ключ хоста SSH?

Я клонировал сервер, и поэтому у них один и тот же отпечаток ключа RSA.

Кажется, это определено в /etc/ssh/ssh_host_rsa_key.pub,

Как правильно это изменить?

Благодарю.

8 ответов

Решение

Выполните следующие шаги для регенерации ключей хоста OpenSSH

  1. Удалить старые ключи хоста ssh: rm /etc/ssh/ssh_host_*
  2. Переконфигурируйте сервер OpenSSH: dpkg-reconfigure openssh-server
  3. Обновите все ssh-клиенты ~/.ssh/known_hosts файлы

Ссылка

Или удалите ключи и

ssh-keygen -A

Объяснение:

-A: Для каждого из типов ключей (rsa1, rsa, dsa, ecdsa и ed25519), для которых ключи хоста не существуют, создайте ключи хоста с путем к файлу ключа по умолчанию, пустой парольной фразой, битами по умолчанию для типа ключа и значением по умолчанию комментарий. Это используется /etc/rc для генерации новых ключей хоста.

Для общего метода сделать это:

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

смешивать и сопоставлять в соответствии с ключами, которые поддерживает ваша версия OpenSSH.

Удалите их и перезапустите службу SSHd. Они будут возрождены.

Пользователь Debian 10.7 здесь. Смешение двух лучших ответов было самым простым способом решить проблему:

(Как root или sudo самостоятельно)

  • сервер ABCD: перемещение старых ключей в «резервную» папку

    mkdir -p ~/ssh_backup && mv /etc/ssh/ssh_host_* ~/ssh_backup/.

  • сервер ABCD: Сгенерировать новые ключи:

    ssh-keygen -A

  • КЛИЕНТСКАЯ СТОРОНА: подделка предыдущего ключа для сервера ABCD.

    ssh-keygen -R A.B.C.D

Вот и все, можно использовать свежие ключи SSH.

В AWS Linux и, следовательно, в других производных Red Hat результат перезапуска sshd и использования не одинаков.

Вы получаете разные ключи и разные права собственности на группы. Перезапуск sshd с удаленными ключами дает тот же результат, что и первоначальная установка.

Первоначальные условия:

      ls -l /etc/ssh/ssh_host_*   
-rw-r-----. 1 root ssh_keys  227 Dec  7  2017 /etc/ssh/ssh_host_ecdsa_key
-rw-r--r--. 1 root root      162 Dec  7  2017 /etc/ssh/ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys  387 Dec  7  2017 /etc/ssh/ssh_host_ed25519_key
-rw-r--r--. 1 root root       82 Dec  7  2017 /etc/ssh/ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys 1679 Dec  7  2017 /etc/ssh/ssh_host_rsa_key
-rw-r--r--. 1 root root      382 Dec  7  2017 /etc/ssh/ssh_host_rsa_key.pub

Использоватьssh-keygen -Aдля создания ключей хоста:

      rm /etc/ssh/ssh_host_*
ssh-keygen -A

-rw-------. 1 root root  668 Oct 25 13:30 /etc/ssh/ssh_host_dsa_key
-rw-r--r--. 1 root root  628 Oct 25 13:30 /etc/ssh/ssh_host_dsa_key.pub
-rw-------. 1 root root  227 Oct 25 13:30 /etc/ssh/ssh_host_ecdsa_key
-rw-r--r--. 1 root root  200 Oct 25 13:30 /etc/ssh/ssh_host_ecdsa_key.pub
-rw-------. 1 root root  444 Oct 25 13:30 /etc/ssh/ssh_host_ed25519_key
-rw-r--r--. 1 root root  120 Oct 25 13:30 /etc/ssh/ssh_host_ed25519_key.pub
-rw-------. 1 root root 1003 Oct 25 13:30 /etc/ssh/ssh_host_key
-rw-r--r--. 1 root root  668 Oct 25 13:30 /etc/ssh/ssh_host_key.pub
-rw-------. 1 root root 1679 Oct 25 13:30 /etc/ssh/ssh_host_rsa_key
-rw-r--r--. 1 root root  420 Oct 25 13:30 /etc/ssh/ssh_host_rsa_key.pub

Позвольте sshd сгенерировать недостающие ключи хоста:

      rm /etc/ssh/ssh_host_*
systemctl restart sshd

-rw-r-----. 1 root ssh_keys  227 Oct 25 13:31 /etc/ssh/ssh_host_ecdsa_key
-rw-r--r--. 1 root root      162 Oct 25 13:31 /etc/ssh/ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys  387 Oct 25 13:31 /etc/ssh/ssh_host_ed25519_key
-rw-r--r--. 1 root root       82 Oct 25 13:31 /etc/ssh/ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys 1675 Oct 25 13:31 /etc/ssh/ssh_host_rsa_key
-rw-r--r--. 1 root root      382 Oct 25 13:31 /etc/ssh/ssh_host_rsa_key.pub

Скрипт (в случае перезапуска демона sshd автоматически не восстанавливать ключи)

#!/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

Я настоятельно рекомендую использоватьshred(илиgshredна macOS/brew install coreutils).

      sudo shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
Другие вопросы по тегам