Вопрос или проблема
Я клонировал сервер, и у них одинаковая RSA ключевая отпечатка.
Похоже, это определяется в /etc/ssh/ssh_host_rsa_key.pub
.
Как правильно это изменить?
Спасибо.
Или удалите ключи и
ssh-keygen -A
Пояснение:
-A
: Для каждого из типов ключей (rsa1, rsa, dsa, ecdsa и ed25519), для которых хостовые ключи не существуют, генерировать хостовые ключи с использованием пути к файлу по умолчанию, пустой парольной фразы, бит по умолчанию для типа ключа и комментария по умолчанию. Это используется /etc/rc для генерации новых хостовых ключей.
Следуйте этим шагам для регенерации хостовых ключей OpenSSH
- Удалить старые хостовые ключи ssh:
rm /etc/ssh/ssh_host_*
- Перенастроить сервер OpenSSH:
dpkg-reconfigure openssh-server
- Обновить все файлы
~/.ssh/known_hosts
на клиентской стороне
Для общего метода выполнения этого:
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
ssh-keygen -q -N "" -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
комбинируйте и выбирайте в зависимости от ключей, которые поддерживает ваша версия OpenSSH. Современные реализации обычно генерируют только rsa, ecdsa и ed25519.
Обратите внимание, что аргумент -b
может использоваться в (большинстве) случаев для указания размера ключа.
Вы должны выбрать размер ключа, соответствующий предполагаемому сроку службы ключа и допустимому времени для установления соединения, так как воздействие будет более заметным на более медленном оборудовании. Например, использование размера ключа RSA по умолчанию (2048 на момент написания) абсолютно нормально (опять же, на момент написания), если вы периодически заменяете ключ.
Если вы используете RHEL, CentOS или Fedora, вы можете просто удалить их и перезапустить службу SSHd. Они будут сгенерированы заново.
Я пользователь Debian 10.7. Смешивание двух лучших ответов было самым чистым способом решения проблемы:
(Как root или используйте sudo)
-
сервер A.B.C.D : Переместите старые ключи в папку “backup”
mkdir -p ~/ssh_backup && mv /etc/ssh/ssh_host_* ~/ssh_backup/.
-
сервер A.B.C.D : Сгенерируйте новые ключи:
ssh-keygen -A
-
НА СТОРОНЕ КЛИЕНТА: забудьте о предыдущем ключе для сервера A.B.C.D
ssh-keygen -R A.B.C.D
Готово, свежие ssh ключи могут быть использованы.
— Редактирование: однострочник для простого удаления и регенерации ключа sshd на стороне сервера
rm /etc/ssh/ssh_host_* && ssh-keygen -A
На AWS Linux и, вероятно, других производных Red Hat, результат от перезапуска sshd и использования ssh-keygen -A
не одинаков.
Вы получаете различные ключи и различную групповую собственность. Перезапуск 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
# Перегенерация материалов ключей SSHD, перезапуск sshd, если указано "-r" в командной строке
set -o nounset
WHERE=/etc/ssh
# перейти в директорию
pushd $WHERE >/dev/null
if [[ $? != 0 ]]; then
echo "Не удалось перейти в $WHERE -- выход" >&2
exit 1
fi
# создать папку для резервных копий
NOW=`date '+%Y%m%d.%H%M%S'` # строка NOW по умолчанию
BAKDIR=bak_$NOW
mkdir $BAKDIR
if [[ $? != 0 ]]; then
echo "Не удалось создать папку $BAKDIR -- выход" >&2
exit 1
fi
# переместить существующий материал ключей в папку для резервных копий
mv ssh_host_* $BAKDIR
if [[ $? != 0 ]]; then
echo "Не удалось переместить старые файлы в $BAKDIR -- выход" >&2
exit 1
fi
# сгенерировать новые ключи
ssh-keygen -A
if [[ $? != 0 ]]; then
echo "Не удалось воссоздать ключи -- выход" >&2
exit 1
fi
# ssh-keygen может создать DSA ключи, но:
# "Никогда не используйте DSA или ECDSA"
# https://security.stackexchange.com/a/46781/25661
/bin/rm -f *_dsa_key *_dsa_key.pub
/bin/rm -f *_ecdsa_key *_ecdsa_key.pub
# на Fedora, необходимо немного настроить разрешения
chmod 640 *_key
chgrp ssh_keys *_key
# убедитесь, что атрибуты SELinux соответствуют требованиям
restorecon -R $WHERE
# Готово
echo "Новый материал ключей"
ls -l *_key *_key.pub
# Делайте рискованные вещи
if [[ $1 == '-r' ]]; then
echo "Перезапуск демона SSH"
systemctl restart sshd
fi
# вернуться к тому, где вы были
popd >/dev/null
Я настоятельно рекомендую использовать shred
(или gshred
на macOS/brew install coreutils
).
sudo shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
.
Ответ или решение
Изменение SSH хост-ключей является важной задачей для обеспечения безопасности серверов. Когда вы клонируете сервер, процесс клонирования переносит и конфигурационные файлы, такие как SSH хост-ключи. Это может привести к проблемам безопасности, так как два сервера будут иметь одинаковые отпечатки RSA-ключей, что может вызвать недоразумения и потенциальные угрозы безопасности. В данной ситуации важно знать, как правильно изменить SSH хост-ключи.
Теория
SSH (Secure Shell) использует пару ключей для проверки подлинности сервера перед подключением клиента. Хост-ключи играют ключевую роль в обеспечении безопасности при установлении SSH-соединений. Если два сервера имеют одинаковые хост-ключи, это может позволить злоумышленникам провести атаки, основываясь на подмене данных или атаке "человек посередине".
Пример
Предположим, вы склонировали сервер C1 в сервер C2. После этого оба сервера будут иметь идентичные SSH хост-ключи. Клиенты, подключающиеся к серверу C2, могут обнаружить конфликт, так как они смогут идентифицировать сервер как уже знакомый им C1. Это создает вероятность нарушения безопасности, так как злоумышленник может воспользоваться данной уязвимостью для проведения атак.
Применение
-
Удаление существующих SSH хост-ключей:
Чтобы избежать конфликтов и угроз, вам нужно удалить существующие ключи. Сделать это можно, выполнив команду:sudo rm /etc/ssh/ssh_host_*
Это приведет к удалению всех существующих хост-ключей.
-
Генерация новых SSH хост-ключей:
После удаления старых ключей, нужно сгенерировать новые:sudo ssh-keygen -A
Опция
-A
обеспечивает генерацию всех необходимых типов хост-ключей (rsa, dsa, ecdsa и ed25519), если они отсутствуют. Это обеспечивает стандартный набор ключей для большинства современных реализаций SSH. -
Перезапуск SSH-сервера:
После регенерации ключей, необходимо перезапустить SSH-сервис для использования новых ключей:sudo systemctl restart sshd
Этот шаг обновляет конфигурацию SSH, чтобы обеспечить работу с новыми ключами.
-
Обновление у клиентов:
После изменения ключей необходимо проинформировать пользователей о смене отпечатков. Пользователям следует обновить файл~/.ssh/known_hosts
, удалив старый отпечаток сервера, используя команду:ssh-keygen -R <IP или имя_хоста_сервера>
Это позволит клиентам заново аутентифицировать сервер при следующем подключении.
-
Использование shred для уничтожения старых ключей:
Для повышения безопасности, можно навсегда уничтожить старые ключи, применяя инструментshred
:sudo shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
Это гарантирует, что восстановление данных из старых файлов невозможно.
Заключение
Регулярная смена SSH хост-ключей и правильная их регенерация после клонирования серверов является важной практикой для поддержания уровня безопасности ИТ-инфраструктуры на должном уровне. Это позволяет избежать потенциальных рисков, связанных с использованием одинаковых ключей на нескольких серверах, и гарантирует, что все подключения остаются безопасными и защищенными от атак.
Следуя приведенным шагам и рекомендациям, вы можете эффективно управлять SSH хост-ключами, минимизируя риски и угрозы безопасности. Тщательное внимание к деталям и регулярная проверка рабочей среды помогут вам поддерживать стабильную и безопасную IT-инфраструктуру.