วิธีการเปลี่ยนคีย์โฮสต์ SSH


23

ฉันโคลนเซิร์ฟเวอร์ดังนั้นพวกเขาจึงมีคีย์ลายนิ้วมือ RSA เดียวกัน

/etc/ssh/ssh_host_rsa_key.pubมันน่าจะเป็นที่กำหนดไว้ใน

วิธีที่ถูกต้องในการเปลี่ยนแปลงนั้นคืออะไร?

ขอบคุณ

คำตอบ:


23

หรือลบคีย์และ

ssh-keygen -A

คำอธิบาย:

-A: สำหรับแต่ละประเภทคีย์ (rsa1, rsa, dsa, ecdsa และ ed25519) ที่ไม่มีคีย์โฮสต์ให้สร้างโฮสต์คีย์ด้วยพา ธ ไฟล์คีย์เริ่มต้นวลีรหัสผ่านว่างเปล่าบิตเริ่มต้นสำหรับประเภทคีย์และค่าเริ่มต้น คิดเห็น สิ่งนี้ถูกใช้โดย / etc / rc เพื่อสร้างคีย์โฮสต์ใหม่


แท็กของ OP ระบุเดเบียน แต่ไม่ใช่เฉพาะแพลตฟอร์มคำตอบนี้ดูเหมือนจะเป็นทางออกที่ดีกว่า
mc0e

อืมยกเว้นว่ามันใช้งานไม่ได้กับรุ่นที่เก่ากว่า เช่นล้มเหลวในการบีบเดเบียนซึ่งมี OpenSSH_5.5p1
mc0e

1
สำหรับข้อมูลของคุณ (จากmanpagez.com/man/1/ssh-keygen ) ssh-keygen -Aทำสิ่งต่อไปนี้: "สำหรับประเภทคีย์แต่ละประเภท (rsa1, rsa, dsa, ecsa และ ed25519) ซึ่งไม่มีโฮสต์โฮสต์ให้สร้างโฮสต์ คีย์ที่มีพา ธ ของไฟล์คีย์เริ่มต้นวลีรหัสผ่านว่างบิตเริ่มต้นสำหรับประเภทคีย์และความคิดเห็นเริ่มต้นนี่คือสิ่งที่ / etc / rc ใช้เพื่อสร้างคีย์โฮสต์ใหม่ "
Rabarberski

19

ทำตามขั้นตอนเหล่านี้เพื่อสร้างคีย์โฮสต์ OpenSSH อีกครั้ง

  1. ลบคีย์โฮสต์ ssh เก่า: rm /etc/ssh/ssh_host_*
  2. กำหนดค่าเซิร์ฟเวอร์ OpenSSH ใหม่: dpkg-reconfigure openssh-server
  3. อัพเดต~/.ssh/known_hostsไฟล์ไคลเอ็นต์ ssh ทั้งหมด

การอ้างอิง


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
ฉันคิดว่าวิธีหนึ่งในการปรับปรุงคำถามนี้คือการเพิ่มวิธีการเพิ่มจำนวนบิต iessh-keygen -q -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key
Whitecat

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
George Gaál

ทำงานได้อย่างแน่นอนบน Fedora
David Tonhofer

0

สคริปต์ (ในกรณีที่รีสตาร์ท sshd daemon จะไม่สร้างคีย์ใหม่โดยอัตโนมัติ)

#!/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 น่าจะเป็นทางคณิตศาสตร์ที่แข็งแกร่งที่สุด (และเร็วที่สุด) แต่ยังไม่ได้รับการสนับสนุนอย่างกว้างขวางในฐานะโบนัสมันมีการเข้ารหัสที่แข็งแกร่งกว่า โดยค่าเริ่มต้นกว่าประเภทคีย์อื่น ๆ - RSA เป็นทางออกที่ดีที่สุดหากคุณไม่สามารถใช้ Ed25519 ได้ "
David Tonhofer

อ่าคุณพูดถูก ฉันเห็นมันตอนนี้
ทอดด์วอลตัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.