SSH: ไม่สามารถสร้างความถูกต้องของโฮสต์ <host>


83

ข้อความนี้หมายความว่าอย่างไร นี่เป็นปัญหาที่อาจเกิดขึ้นหรือไม่? ช่องไม่ปลอดภัยหรือไม่

หรือนี่เป็นเพียงข้อความเริ่มต้นที่แสดงเสมอเมื่อเชื่อมต่อกับเซิร์ฟเวอร์ใหม่

ฉันเคยเห็นข้อความนี้เมื่อใช้ SSH ในอดีต: ฉันมักจะเข้าสู่ระบบด้วยรหัสผ่านตามปกติและฉันรู้สึกดีกับมันเพราะฉันไม่ได้ใช้กุญแจส่วนตัว / สาธารณะ (ซึ่งปลอดภัยกว่านี้มาก รหัสผ่านสั้น ๆ ) แต่ครั้งนี้ฉันได้ตั้งค่ากุญแจสาธารณะด้วย ssh สำหรับการเชื่อมต่อของฉันไปยัง bitbucket แต่ฉันยังได้รับข้อความ ฉันทราบว่าพรอมต์ข้อความรหัสผ่านในตอนท้ายเป็นมาตรการรักษาความปลอดภัยเพิ่มเติมที่แตกต่างกันสำหรับการถอดรหัสของคีย์ส่วนตัว

ฉันหวังว่าจะมีใครบางคนสามารถให้คำอธิบายที่ดีเกี่ยวกับข้อความ "ความจริงแท้ที่ไม่สามารถสร้างได้"

The authenticity of host 'bitbucket.org (207.223.240.181)' can't be established.

RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'bitbucket.org,207.223.240.181' (RSA) to the list of
known hosts.
Enter passphrase for key '/c/Users/Steven/.ssh/id_rsa':

2
นี่เป็นหนึ่งใน "หมายถึงสิ่งที่ระบุว่า" ข้อความ มันหมายถึงการมีวิธีการที่จะบอกว่าคุณเป็นจริงไม่มีการพูดคุยกับssh bitbucket.orgหากคุณกำหนดค่าวิธีที่จะให้รู้ว่ามันไม่ทำงาน หากคุณไม่ทำเช่นนั้นก็เป็นการบอกคุณว่าคุณไม่ได้ทำ
David Schwartz

คำตอบ:


71

กำลังบอกคุณว่าคุณไม่เคยเชื่อมต่อกับเซิร์ฟเวอร์นี้มาก่อน หากคุณคาดหวังว่ามันเป็นเรื่องปกติอย่างสมบูรณ์ หากคุณหวาดระแวงให้ตรวจสอบการตรวจสอบ / ลายนิ้วมือของกุญแจโดยใช้ช่องทางอื่น (แต่โปรดทราบว่าคนที่สามารถเปลี่ยนการเชื่อมต่อ ssh ของคุณสามารถเปลี่ยนเส้นทางเซสชันของเว็บเบราว์เซอร์ได้)

หากคุณเชื่อมต่อกับเซิร์ฟเวอร์นี้มาก่อนจากการติดตั้ง ssh แสดงว่าเซิร์ฟเวอร์ได้รับการกำหนดค่าใหม่ด้วยรหัสใหม่หรือมีใครบางคนกำลังปลอมแปลงตัวตนของเซิร์ฟเวอร์ เนื่องจากความรุนแรงของการจู่โจมแบบ Man-in-the-Mid ก็เตือนคุณถึงความเป็นไปได้

ทั้งสองวิธีที่คุณมีช่องเข้ารหัสที่ปลอดภัยเพื่อใครสักคน ไม่มีใครที่ไม่มีคีย์ส่วนตัวที่สอดคล้องกับลายนิ้วมือ97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40สามารถถอดรหัสสิ่งที่คุณส่งได้

กุญแจที่คุณใช้ในการรับรองความถูกต้องของตัวเองนั้นไม่เกี่ยวข้อง ... คุณไม่ต้องการส่งข้อมูลการตรวจสอบสิทธิ์ไปยังเซิร์ฟเวอร์ที่หลอกลวงซึ่งอาจขโมยข้อมูลดังกล่าวและดังนั้นคุณไม่ควรคาดหวังการเปลี่ยนแปลงใด ๆ ขึ้นอยู่กับว่าคุณจะใช้ข้อความรหัสผ่านหรือ กุญแจส่วนตัวเพื่อเข้าสู่ระบบ คุณเพียงแค่ยังไม่ได้รับที่ไกลในกระบวนการยัง


ดังนั้นแม้ว่าจะมีบุคคลที่สามที่เป็นอันตรายและฉันยกเลิกข้อความทั้งหมดที่ฉันกำลังจะทำคือการส่งกุญแจสาธารณะของฉันและเขาจะยังไม่สามารถถอดรหัสข้อมูลของฉันได้? ดังนั้นตอนนี้วิธีเดียวที่ข้อมูลของฉันสามารถถูกบุกรุกได้คือ (1) คีย์ส่วนตัวของฉันถูกบุกรุกหรือ (2) เซิร์ฟเวอร์ของ bitbucket ถูกบุกรุกหรือ (3) บัญชี bitbucket ของฉันถูกบุกรุก ตราบใดที่พวกเขา จำกัด การพยายามลงชื่อเข้าใช้ (ซึ่งฉันจะแปลกใจจริง ๆ หากพวกเขาไม่ทำ) มีหลายเหตุผลที่ทำให้หวาดระแวง ณ จุดนี้ใช่มั้ย?
Steven Lu

10
@Steven: คุณไม่ได้ส่งกุญแจสาธารณะให้เขาเขามีมันอยู่แล้ว สิ่งที่คุณกำลังทำคือการใช้กุญแจส่วนตัวของคุณในการตรวจสอบความท้าทาย ... ถ้าเขาเชื่อมต่อกับbitbucket.org จริงที่อ้างว่าเป็นคุณได้รับความท้าทายที่แท้จริงและใช้ความท้าทายนั้นเมื่อคุณท้าทายเขาจะหลอกคุณ ส่งคำตอบที่ถูกต้องซึ่งเขาใช้เพื่อเข้าถึงบัญชีของคุณบน bitbucket.org จริง เขายังไม่มีรหัสส่วนตัวของคุณดังนั้นเขาจึงไม่สามารถเข้าสู่ระบบได้ตลอดเวลาในอนาคตหรือไปยังแหล่งข้อมูลอื่น ๆ ที่คีย์ปลดล็อค แต่เขามีเซสชันการเข้าสู่ระบบหนึ่งครั้ง
Ben Voigt

นั่นคือสิ่งที่ฉันต้องการในคำตอบเมื่อฉันพูดว่า "คุณไม่ต้องการส่งข้อมูลการตรวจสอบสิทธิ์ไปยังเซิร์ฟเวอร์ที่หลอกลวง"
Ben Voigt

2
"หากคุณหวาดระแวงให้ตรวจสอบการตรวจสอบ / ลายนิ้วมือของกุญแจโดยใช้ช่องทางอื่น" สำหรับหวาดระแวง (และสำหรับบันทึก) ลายนิ้วมือ GitHub อยู่บนhelp.github.com/articles/generating-ssh-keysและ bitbucket ถูกกล่าวถึงในconfluence.atlassian.com/display/BITBUCKET/...
Sundar

1
@BenVoigt ใช่ฉันเข้าใจว่าหวาดระแวงอย่างแท้จริงของหลักสูตรจะได้รับไปยังหน้าเว็บเหล่านั้นผ่านทางเครือข่ายที่ไม่เกี่ยวข้องที่แตกต่างกันหรืออาจจะบินไปยังสำนักงานใหญ่ GitHub และได้รับลายนิ้วมือในคน :)
Sundar

21

ให้เราบอกว่าคุณเจอใครบางคนเพื่อแลกเปลี่ยนความลับทางธุรกิจ ที่ปรึกษาของคุณบอกคุณว่าคุณไม่เคยพบกับบุคคลนั้นมาก่อนและเป็นคนหลอกลวง นอกจากนี้สำหรับการประชุมครั้งต่อไปกับเขาที่ปรึกษาของคุณจะไม่เตือนคุณอีกต่อไป นั่นคือความหมายของข้อความ บุคคลคือเซิร์ฟเวอร์ระยะไกลและที่ปรึกษาของคุณคือไคลเอนต์ ssh

ฉันไม่คิดว่ามันเป็นเรื่องหวาดระแวงที่จะตรวจสอบตัวตนของคน ๆ นั้นซ้ำก่อนที่จะแบ่งปันความลับกับเธอ ตัวอย่างเช่นคุณสามารถเปิดเว็บเพจที่มีรูปภาพของเธอและเปรียบเทียบกับหน้าของคุณ หรือตรวจสอบบัตรประจำตัวของเธอ

สำหรับเซิร์ฟเวอร์ bitbucket คุณสามารถใช้คอมพิวเตอร์ที่แตกต่างและน่าเชื่อถือกว่าและรับภาพใบหน้าจากนั้นจากนั้นเปรียบเทียบกับคอมพิวเตอร์ที่คุณใช้งานอยู่ในตอนนี้ ใช้:

 ssh-keyscan -t rsa bitbucket.org | ssh-keygen -lv -f -

หากใบหน้าตรงกันคุณสามารถเพิ่มคีย์ลงในไฟล์ได้เช่น~/.ssh/known_hosts(ตำแหน่งมาตรฐานในลีนุกซ์หลายรุ่น) ด้วย:

ssh-keyscan -t rsa -H bitbucket.org >> ~/.ssh/known_hosts

และลูกค้า ssh จะไม่เตือนคุณเพราะมันรู้ใบหน้าของเธอแล้ว มันจะเปรียบเทียบใบหน้าทุกเวลาที่คุณเชื่อมต่อ นั่นเป็นสิ่งสำคัญมาก ในกรณีของคนหลอกลวง (เช่นการโจมตีแบบคนกลาง) ลูกค้า ssh จะปฏิเสธการเชื่อมต่อเพราะใบหน้าจะเปลี่ยนไป


คำตอบนี้มีประโยชน์มาก
010110110101

4
นี่ควรเป็นคำตอบที่ได้รับการยอมรับ: ssh-keyscan -t rsa -H bitbucket.org >> ~/.ssh/known_hosts ขอบคุณ Ivan!
ร็อด

1
@Rod: คุณจะเลือกคำตอบที่ได้รับการยอมรับขึ้นอยู่กับคำสั่งซึ่งเป็นทั้งที่ไม่จำเป็นโดยสิ้นเชิง (คุณสามารถปรับเปลี่ยนknown_hostsได้โดยเพียงแค่พิมพ์คำว่า "ใช่" คำเตือนเดิมดังที่แสดงอยู่ในคำถาม) และอันตราย (คีย์ที่คุณเพิ่มที่คุณ ไฟล์ไม่จำเป็นต้องเป็นไฟล์เดียวกับที่คุณดูเพราะคุณดึงมาสองครั้ง!)?
Ben Voigt

@BenVoigt สิ่งที่วิธีการแก้ปัญหานี้ให้การพิมพ์ว่า "ใช่" ไม่ได้เป็นว่าโซลูชั่นนี้เป็นสคริปต์อย่างเต็มที่ ฉันคิดว่าคนส่วนใหญ่สามารถหาวิธีตอบ "(ใช่ / ไม่)" รวดเร็ว ฉันเจอคำถาม & คำตอบนี้ในขณะที่พยายามหาวิธีแก้ปัญหาโดยไม่ต้องมีการแทรกแซงจากมนุษย์ (สำหรับสคริปต์การตั้งค่าเซิร์ฟเวอร์) ด้วยความตื่นเต้นของฉันฉันเดาว่าฉันไม่ได้สังเกตว่าคำถามของ OP แตกต่างจากของฉันเล็กน้อย แต่ IMO นี้ยังคงเป็นคำตอบที่มีประโยชน์ / ไม่ชัดเจนในเธรด
ร็อด

1
@Rod: ไม่มันไม่มีประโยชน์ การลดความปลอดภัยของคุณไม่ดี การค้นหาวิธีที่เร็วกว่าในการลดความปลอดภัยของคุณคือสิ่งที่ตรงกันข้ามที่มีประโยชน์
Ben Voigt

5

ฉันเพียงแค่ต้องสร้างknown_hostsไฟล์ข้อความ~/.ssh

sudo vim ~/.ssh/known_hosts
sudo chmod 777 ~/.ssh/known_hosts

หลังจากทำสิ่งนี้มันก็เพิ่มโฮสต์และฉันไม่เคยเห็นข้อความอีกเลย


ฉันไม่คิดว่ามันจะเปลี่ยนแปลงอะไรจริงๆ คำเตือนจะปรากฏขึ้นเมื่อเซิร์ฟเวอร์มีการเปลี่ยนแปลง ตัวอย่างเช่นหากคุณจัดเตรียมเครื่องเสมือนใหม่ที่คุณกำลังเชื่อมต่อเป็นครั้งแรก หรือไม่คุณมีknown_hostsไฟล์ (มีสิทธิ์ที่ถูกต้อง) ไม่หยุดมันจากการถามคุณเกี่ยวกับความถูกต้องของเซิร์ฟเวอร์ใหม่ ... ถ้าคุณมีอย่างใดเรียกแล้วผับลายเซ็นที่สำคัญสำหรับเซิร์ฟเวอร์นี้และใส่ลงในของคุณknown_hosts, ซึ่งเป็นวิธีหนึ่งที่ปกติจะข้ามการตรวจสอบ ( แต่แค่บอกว่า "ใช่" ในการตรวจสอบมักจะเร็วขึ้นคือการบรรลุเดียวกัน)
สตีเว่น Lu

ขอบคุณ ฉันรู้จัก _ โฮสต์ แต่ได้รับคำเตือนต่อไป ฉันต้องเปลี่ยนการอนุญาตบน known_hosts เพื่อให้คำเตือนหยุดลง
ArcaneDominion

6
โปรดอย่าทำเช่นนี้ อาจเป็นอันตรายต่อความปลอดภัยอย่างร้ายแรง ไฟล์โฮสต์ของคุณควรเขียนได้โดยคุณเท่านั้น คำสั่งที่สองนั้นโดยทั่วไปแล้วอนุญาตให้ใครก็ตามในคอมพิวเตอร์ของคุณปลอมแปลงข้อมูลประจำตัวของเซิร์ฟเวอร์
Stolz

"คำเตือนจะปรากฏขึ้นเมื่อเซิร์ฟเวอร์เปลี่ยนไป" หรือเมื่อเซิร์ฟเวอร์ไม่เคยเยี่ยมชมมาก่อน
ร็อด

2

มีอีกวิธีที่ง่ายเพียงแค่แตะที่ไฟล์ "config" ใต้ /root/.ssh และเพิ่มพารามิเตอร์ StrictHostKeyChecking no ในครั้งต่อไปเมื่อคุณลงชื่อเข้าใช้เซิร์ฟเวอร์พวกเขาจะเพิ่มคีย์ rsa ใน known_hosts และจะไม่ถามว่า "ใช่" สำหรับการยืนยันความถูกต้อง


3
ไม่แนะนำ มันง่าย แต่ไม่ใช่วิธีที่ถูกต้องในการจัดการกับสถานการณ์
Vikas

1

ข้อความนี้เป็นเพียง SSH บอกคุณว่าไม่เคยเห็นกุญแจโฮสต์นี้มาก่อนดังนั้นจึงไม่สามารถยืนยันได้อย่างแท้จริงว่าคุณกำลังเชื่อมต่อกับโฮสต์ที่คุณคิดว่าคุณเป็น เมื่อคุณพูดว่า "ใช่" มันจะใส่คีย์ ssh ลงในไฟล์ known_hosts ของคุณจากนั้นการเชื่อมต่อที่ตามมาจะเปรียบเทียบคีย์ที่ได้รับจากโฮสต์กับหนึ่งในไฟล์ known_hosts

มีบทความที่เกี่ยวข้องในกองล้นแสดงวิธีการปิดการใช้งานคำเตือนนี้https://stackoverflow.com/questions/3663895/ssh-the-authenticity-of-host-hostname-cant-be-established


10
แต่ไม่แนะนำให้ปิดการใช้งานคำเตือน- มีไว้เพื่อวัตถุประสงค์ในการให้ข้อมูลความปลอดภัยที่มีประโยชน์มาก
Rory Alsop

0

นอกเหนือจากคำตอบที่ได้รับไปแล้ว (คุณไม่เคยเชื่อมต่อกับโฮสต์นี้มาก่อน) มีความเป็นไปได้ที่ชัดเจนว่าคุณไม่เคยเชื่อมต่อจากโฮสต์ปัจจุบันมาก่อน (ไปยังโฮสต์นั้น) สิ่งนี้แตกต่างทางจิตใจเท่านั้น คุณคิดว่าคุณกำลังเชื่อมต่อจากโฮสต์ A (ถึง B) ในขณะที่คุณกำลังพยายามเชื่อมต่อจากโฮสต์ X (ถึง B) จริงๆ ตัวอย่างนี้สามารถเกิดขึ้นได้เมื่อคุณ ssh-ed ครั้งแรกจาก A ถึง X และจากเทอร์มินัลเดียวกันพยายามที่จะ ssh ถึง B โดยคิดว่าคุณยังอยู่ใน A.


ฉันสงสัยว่าการใช้การส่งต่อตัวแทนยังสามารถระงับคำเตือนหากโฮสต์ A รู้เกี่ยวกับ B แต่ X ไม่ได้ แต่การส่งต่อตัวแทนเกิดขึ้นระหว่าง A และ X สภาพแวดล้อมส่วนใหญ่ (ซึ่งมีssh) และแอปเทอร์มินัลรองรับการส่งต่อตัวแทน ลดจำนวนของ ssh keys ที่คุณต้องจัดการเพื่อใช้กับอุปกรณ์ปลายทางของคุณ
Steven Lu

0

ในกรณีที่รหัสผ่านของฉันน้อยเข้าสู่ระบบไม่ทำงานเพราะสิทธิ์ไดเรกทอรีบ้านของฉันเพราะฉันเปลี่ยนการตั้งค่าเริ่มต้น ในที่สุดนี่คือสิ่งที่ได้ผลสำหรับฉัน สิทธิ์ไดเรกทอรีบ้านของฉันคือ

/ home / ชื่อผู้ใช้

drwxr----x. 18 username     groupname  4096 May 11 11:52 username

/home/username/.ssh

268823097 drwx------   2 username groupname     29 May 11 11:53 .ssh

/home/username/.ssh/authorized_keys

-rw-r----- 1 username groupname 402 May 11 11:53 authorized_keys
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.