如何更改SSH主机密钥?


23

我克隆了一个服务器,因此它们具有相同的RSA密钥指纹。

它似乎在中定义/etc/ssh/ssh_host_rsa_key.pub

改变它的正确方法是什么?

谢谢。

Answers:


23

或者,删除键并

ssh-keygen -A

说明:

-A:对于不存在主机密钥的每种密钥类型(rsa1,rsa,dsa,ecdsa和ed25519),请生成具有默认密钥文件路径,空密码短语,密钥类型默认位和默认值的主机密钥评论。/ etc / rc使用它来生成新的主机密钥。


OP的标签指定debian,但不是特定于平台的,此答案似乎是更好的解决方案。
mc0e 2014年

嗯,除了似乎不适用于旧版本。例如,在debian squeeze上失败,它具有OpenSSH_5.5p1
mc0e 2014年

1
供您参考(来自manpagez.com/man/1/ssh-keygenssh-keygen -A,请执行以下操作:“对于不存在主机密钥的每种密钥类型(rsa1,rsa,dsa,ecdsa和ed25519),请生成主机带有默认密钥文件路径,空密码短语,密钥类型的默认位和默认注释的密钥。/etc/rc使用它来生成新的主机密钥。”
Rabarberski 2015年

19

请按照以下步骤重新生成OpenSSH主机密钥

  1. 删除旧的ssh主机密钥: rm /etc/ssh/ssh_host_*
  2. 重新配置OpenSSH服务器: dpkg-reconfigure openssh-server
  3. 更新所有ssh客户端~/.ssh/known_hosts文件

参考


8

对于执行此操作的通用方法:

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版本支持的密钥进行混合和匹配。


1
我认为改善这个问题的一种方法是增加增加位数的方法。即ssh-keygen -q -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key
Whitecat '16

0

删除它们并重新启动SSHd服务。它们将被重新生成。


1
不,它不起作用。/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
确实。仅适用于基于RHEL的发行版。抱歉
Heis Spiter

好建议,谢谢。它对我来说适用于CentOS安装。
乔治·加尔(GeorgeGaál)

绝对适用于Fedora
David Tonhofer,2016年

0

脚本(如果重新启动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

您评论中的链接并不表示不应使用ECDSA。
托德·沃尔顿

@ToddWalton实际上是的。依次给出第三个答案:“-永远不要使用DSA或ECDSA。-Ed25519在数学上可能是最强大的(也是最快的),但尚未得到广泛支持。此外,它还具有更强的私钥加密(密码保护)功能默认情况下,它比其他密钥类型要好。-如果您不能使用Ed25519,RSA是最好的选择。”
David Tonhofer

啊,你是对的。我现在看到了。
托德·沃尔顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.