web-dev-qa-db-ja.com

SSHホストキーを変更する方法

私はサーバーのクローンを作成したので、RSAキーのフィンガープリントは同じです。

/etc/ssh/ssh_Host_rsa_key.pubで定義されているようです。

それを変更する正しい方法は何ですか?

ありがとう。

29

OpenSSHホストキーを再生成するには、次の手順に従います

  1. 古いSSHホストキーを削除します:rm /etc/ssh/ssh_Host_*
  2. OpenSSHサーバーを再構成します:dpkg-reconfigure openssh-server
  3. すべてのSSHクライアントを更新~/.ssh/known_hostsファイル

参考

23

または、キーを削除し、

ssh-keygen -A

説明:

-A:ホストキーが存在しない各キータイプ(rsa1、rsa、dsa、ecdsa、ed25519)について、デフォルトのキーファイルパス、空のパスフレーズ、キータイプのデフォルトビットを使用してホストキーを生成します。デフォルトのコメント。これは/ etc/rcが新しいホストキーを生成するために使用します。

32
philippe

これを行う一般的な方法:

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のバージョンがサポートするキーに応じて、組み合わせてください。

11
Olipro

それらを削除し、SSHdサービスを再起動します。それらは再生されます。

1
Heis Spiter

スクリプト(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
0
David Tonhofer