กำลังพยายามตรวจสอบความถูกต้อง ssh กับไฟล์คีย์: เซิร์ฟเวอร์ปฏิเสธกุญแจของเรา


53

ฉันกำลังพยายามตั้งค่าการรับรองความถูกต้อง ssh ด้วยไฟล์คีย์แทนชื่อผู้ใช้ / รหัสผ่าน ไคลเอนต์เป็นกล่อง Windows ที่ใช้ PuTTY และเซิร์ฟเวอร์เป็นเซิร์ฟเวอร์ Ubuntu 12.04 LTS

ฉันดาวน์โหลด puttygen.exe และให้มันสร้างคู่ที่สำคัญ ใน/etc/ssh/sshd_configฉันมีสายนี้:

AuthorizedKeysFile %h/.ssh/authorized_keys

และในไฟล์กุญแจสาธารณะของลูกค้ามันบอกว่า:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "my@email.address.com"
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAr3Qo6T5XU06ZigGOd3eKvfBhFLhg5kWv8lz6
qJ2G9XCbexlPQGanPhh+vcPkhor6+7OmB+WSdHeNO652kTofnauTKcTCbHjsT7cJ
GNrO8WVURRh4fabknUHPmauerWQZ6TgRPGaz0aucU+2C+DUo2SKVFDir1vb+4u83
AV1pKxs=my@email.address.com
---- END SSH2 PUBLIC KEY ----

ฉันคัดลอกส่วนหนึ่งจาก "ssh-rsa AAA" ไปที่ "my@email.address.com" และใส่ลงในไฟล์~/.ssh/authorized_keysบนเซิร์ฟเวอร์ของฉัน ใน PuTTY ภายใต้การเชื่อมต่อ> SSH> รับรองความถูกต้องฉันป้อนเส้นทางไปยังคีย์ส่วนตัวที่สร้างขึ้นบนไคลเอนต์ของฉันและบันทึกการตั้งค่าเซสชัน

ฉันรีสตาร์ทเซิร์ฟเวอร์ ssh ด้วย

sudo service ssh restart

ตอนนี้ถ้าฉันโหลดโปรไฟล์ใน PuTTY (ฉันตรวจสอบว่ากุญแจส่วนตัวยังอยู่ในการเชื่อมต่อ> SSH> รับรองความถูกต้องและเส้นทางที่ถูกต้อง) และเรียกใช้โปรไฟล์ก็บอกว่า

Server refused our key

ฉันพยายามวางกุญแจสาธารณะในไฟล์ภายใต้ไดเรกทอรี ./ssh/authorized_keys/แต่ก็ไม่ได้ช่วยฉันจึงใช้./ssh/authorized_keysเป็นไฟล์วางกุญแจไว้ในนั้น ฉันยังพยายามสร้างคู่คีย์ส่วนตัว / สาธารณะบนเซิร์ฟเวอร์วางกุญแจสาธารณะ./ssh/authorized_filesและโหลดไพรเวตใน PuTTY บนไคลเอ็นต์ของฉัน การรีบูตเซิร์ฟเวอร์ไม่ช่วยเช่นกัน

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

ลองสร้างคีย์ 4096 บิตโดยคิดว่า 1024 สั้นเกินไป

ฉันจะทำให้เรื่องนี้ทำงานได้อย่างไร ขอบคุณ!

แก้ไข:

ตกลง/var/log/auth.logกล่าวว่า:

sshd: Authentication refused: bad ownership or modes for directory /home/vorkbaard/.ssh

Google บอกว่าฉัน~/.ssh/ควรจะเป็น 700 และ~/.ssh/authorized_keysควรเป็น 600 ดังนั้นฉันก็ทำอย่างนั้น ตอนนี้/var/log/auth.logพูดว่า:

sshd: error: key_read: uudecode AAAAB3N [etc etc etc until about 3/4 of my public key]

คำตอบ:


95

ตกลงมันได้รับการแก้ไขแล้ว แต่ฉันไม่เห็นว่าสิ่งนี้แตกต่างจากสิ่งที่ฉันได้ลองไปแล้ว

ฉันทำอะไรไป:

  • สร้างคู่ที่สำคัญกับ puttygen.exe (ความยาว: 1024 บิต)
  • โหลดคีย์ส่วนตัวในโปรไฟล์ PuTTY
  • ป้อนรหัสสาธารณะ~/.ssh/authorized_keys ในหนึ่งบรรทัด (ต้องเริ่มต้นด้วยssh-rsa)
  • chmod 700 ~/.ssh
  • chmod 600 ~/.ssh/authorized_keys
  • chown $USER:$USER ~/.ssh -R
  • เปลี่ยน/etc/ssh/sshd_configดังนั้นจึงมีAuthorizedKeysFile %h/.ssh/authorized_keys
  • sudo service ssh restart

# tail -f /var/log/auth.logสำหรับการแก้ไขปัญหาทำ

ขอบคุณสำหรับความช่วยเหลือของคุณ!


1
อืมดังนั้นสิ่งที่เกิดขึ้นว่าsshd: error: key_read: uudecode AAAAB3Nเกิดข้อผิดพลาดในauth.log?
Alaa Ali

ฉันไม่มีเงื่อนงำ Alaa บางทีฉันอาจเกิดข้อผิดพลาดในการวางสตริงคีย์ก่อนหน้า Auth.log ไม่ได้รับรายการอีกต่อไปในขณะนี้และการตรวจสอบตามคีย์จะทำงานได้อย่างไม่มีที่ติ ปัญหาหลักของฉันคือการที่ฉันไม่ได้จริงๆแน่ใจเกี่ยวกับสิ่งที่จำเป็นต้องทำทำให้วิธีการที่ยากมากขึ้น ดังนั้นฉันไม่รู้ว่าทำไม แต่ใช้งานได้ ขอขอบคุณอีกครั้งสำหรับความช่วยเหลือของคุณ :)
Forkbeard

ที่น่ากลัว !!! ฉันเกาหัวมา 2 วันแล้ว คำตอบนี้ช่วยได้ทั้งวัน !!
นาคา

ขั้นตอนที่ 3 คือเคล็ดลับสำหรับฉัน ฉันไม่ได้ใส่กุญแจสาธารณะในauthorized_keysไฟล์ที่ฉันเพิ่งวางmykey.pubไฟล์ลงใน~/.sshโฟลเดอร์และคิดว่ามันจะมารับมัน สิ่งที่ฉันต้องการในท้ายที่สุดก็คือเรียกใช้หรือแก้ไขและวางด้านล่างคีย์อื่น ๆ ที่อาจมีอยู่ cat mykey.pub >> authorized_keys. ดูเหมือนง่ายในตอนนี้ แต่บทเรียนที่ได้รับคือกุญแจสาธารณะทั้งหมดต้องมีอยู่authorized_keysไม่ใช่แค่ใน~/.ssh/ไดเรกทอรี มีคนกรุณาแนะนำว่านี่ไม่ใช่การยืนยันที่ถูกต้อง
timbrown

หากขั้นตอนไม่ช่วยให้ตรวจสอบด้วย: 1. คุณคัดลอกกุญแจสาธารณะ PuTTY ที่บันทึกไว้ไปที่ authorized_keys ไม่ใช่ OpenSSH หนึ่ง 2. ถ้าคุณคัดลอกโดยใช้การคัดลอก / วางจาก PuTTYgen (ซึ่งคุณควรทำ) คุณอาจแยก กุญแจสาธารณะในหลายบรรทัด; ควรเป็นบรรทัดเดียว ตรวจสอบให้แน่ใจว่าคุณไม่ได้เพิ่มช่องว่างนำหน้าหรือต่อท้ายขณะคัดลอกขอบคุณ r_hartman centos.org/forums/viewtopic.php?t=990
mvladk

23

ฉันเพิ่งพบปัญหานี้ แม้จะมีการตั้งค่าการตั้งค่าอย่างถูกต้องตามที่ระบุไว้แล้วในหัวข้อนี้ (สิทธิ์ใน authorized_keys ฯลฯ ) แต่ปรากฎว่าฉันมีรหัสสาธารณะในรูปแบบที่ไม่ถูกต้อง มันอยู่ในรูปแบบของ:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "imported-openssh-key"
AAAAB3NzaC1yc2EAAAADAQABAAABAQDUoj0N3vuLpeviGvZTasGQ...
... lPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT
---- END SSH2 PUBLIC KEY ----

ซึ่งไม่ทำงาน แต่ทำให้มันทำงานได้ในรูปแบบ:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU.....j0N3vuLpeviGvZTasGQa1rcJiPXQMW7v3uurb+n94B9MQaaWR0odsg5DJQL92TNenOda5BO1nd08y6+sdLQmHXExTz6X8FzgoVsAkEl3RscxcxHUksiKA9JfTo38vQvG/bPxIHMCuSumCQVA1laf3rO/uOrkcB7iMWhaoi1/z6AbFtPzeh7xjGfInMWwtBI0CsHSRF73VWIxT26w0P+KjafCjSn/7vDO1bT8QHujSQelU/GqaVEvbbvPl1a7POVjKgHLNekolwRKfNeVEewcnmZaoqfHgOKlPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT UserName@HOSTNAME

14
คุณสามารถใช้ssh-keygen -i -f filenameofwindowsformpub.keyเพื่อแปลงรหัสสาธารณะให้เป็นรูปแบบที่เซิร์ฟเวอร์ OpenSSH ของคุณเข้าใจ
สีดำ

ใช่มันใช้งานได้สำหรับฉัน! มันจะต้องอยู่ในบรรทัดเดียว ไม่อยากเชื่อเลยว่ามันจะเป็นอย่างนั้น!
adelriosantiago

1
สวัสดี kuraara ฉันคิดว่าคำสั่งข้างต้นโดย @Black ควรจะประสบความสำเร็จในคำตอบ
ekerner

ฉันสามารถเพิ่มความคิดเห็นในรูปแบบเซิร์ฟเวอร์ OpenSSH ได้หรือไม่ สำหรับมนุษย์มันยากที่จะบอกว่าคอมพิวเตอร์นี้เป็นตัวแทนของคีย์นี้
user1700890

เมื่อฉันทำตามคำแนะนำโดย @Black ไม่มีชื่อผู้ใช้ @ HOSTNAME ที่ท้ายของสตริง ฉันไม่รู้ว่าส่วนนั้นสำคัญหรือไม่
arnoldbird

9

ปัญหาคือ windows ใช้บรรทัดใหม่ที่แตกต่างจาก linux ดังนั้นเมื่อคัดลอกคีย์จาก windows ไปยัง linux จะมี\ nที่ส่วนท้ายของบรรทัดที่คุณไม่เห็นบน linux ในเครื่องมือแก้ไข

หากคุณปรับท้าย /var/log/auth.log และลองลงชื่อเข้าใช้ข้อผิดพลาดจะเป็นดังนี้:

sshd: ข้อผิดพลาด: key_read: uudecode AAAAB3N [.... ] == \ n

หากคุณเปลี่ยนคีย์ของคุณบน windows ดังนั้นมันจะอยู่ในบรรทัดเดียวโดยไม่ต้องมีบรรทัดใหม่ในตอนท้ายและคัดลอกมันไปยัง linux มันควรจะทำงานได้ (เป็นเคล็ดลับสำหรับฉัน)


นี่เป็นปัญหาของฉัน แต่ฉันไม่เห็นอะไรเลยใน auth.log เพื่อแนะนำกรณีนี้ น่าหงุดหงิด ...
แอนโทนี

8

ฉันต้องเปลี่ยนการอนุญาตเป็นโฮมไดเรกทอรี

chmod 700 ~

2
สิ่งนี้ใช้ได้สำหรับฉันเช่นกัน (บน AIX แม้ว่า)
stevepastelan

ทำงานให้ฉันใน CentOS ด้วย
Jaywalker

ทำงานให้ฉันใน Redhat! ดูเหมือนว่าการเข้าถึงการเขียนเป็นกลุ่มจะเป็นปัญหาเฉพาะ ยังคงใช้ได้สำหรับฉันถ้าฉันปล่อยให้กลุ่มมีสิทธิ์อ่านแทน: "chmod 740 ~"
Paul

6

ฉันต้องเปลี่ยนการอนุญาตไดเรกทอรี ~ / .ssh จาก 770 เป็น 700 และการอนุญาตไฟล์ ~ / .ssh / authorized_keys จาก 660 เป็น 600

ด้วยเหตุผลบางประการการลบการอนุญาตกลุ่มแก้ไขปัญหานี้ให้ฉัน

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

5

~/.ssh/authorized_keysไฟล์ต้องใช้คีย์จะเป็นทั้งหมดในหนึ่งบรรทัด หากคุณเพิ่มเข้าไปในหลายบรรทัดเช่นเดียวกับในการวางด้านบนลองเข้าร่วมบรรทัด


ขอบคุณที่เหมาะสมแล้วตอนนี้ฉันเข้าใจแล้วว่าทำไมจึงเป็นไฟล์ไม่ใช่ไดเรกทอรี อย่างไรก็ตามมันก็ไม่ได้ช่วยอะไร
Forkbeard

3
สำหรับใครก็ตามที่อาจจะสับสนในเรื่องนี้สิ่งที่เขาหมายถึงคือแต่ละปุ่มนั้นจะต้องอยู่ในบรรทัดเดียว
แอนโธนี

2

นี่คือสิ่งที่ทำงานสำหรับฉัน:

ในputtygenหลังจากที่คุณสร้างคีย์ของคุณแล้วให้ตรวจสอบให้แน่ใจว่าคุณคัดลอกและวางข้อมูลจากฟิลด์ด้านบนเพื่อไปยังไฟล์ authorized_keys ของคุณ หากคุณบันทึกกุญแจสาธารณะของคุณไปยังเครื่องไคลเอนต์จากนั้นเปิดขึ้นข้อความจะแตกต่างจากข้อความที่ด้านบนของputtygenหน้าจอ อีกครั้งให้แน่ใจว่าคุณคัดลอกและวางข้อความจากด้านบนของputtygenหน้าจอ (หลังจากที่คุณได้สร้างคีย์ของคุณ) เป็นไฟล์ authorized_keys ~/.sshของคุณซึ่งควรจะอยู่ใน


สิ่งนี้แก้ไขปัญหาได้จริง ฉันไม่เข้าใจว่าทำไมถ้าคุณคลิกบันทึกกุญแจสาธารณะทำไมมันไม่บันทึกรูปแบบที่เหมาะสม
luky

1

นอกจากคำตอบข้างต้นทั้งหมดแล้วให้แน่ใจว่าคุณคัดลอกและวางกุญแจจากputtygenอย่างถูกต้อง!

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


1

บางครั้งอาจเป็นปัญหาที่เกี่ยวข้องกับการมีพับลิกคีย์ในหนึ่งบรรทัดวิธีนี้ดูเหมือนว่าจะแก้ไขได้

echo 'the content of the public key' > /root/.ssh/authorized_keys

1

สำหรับฉันปัญหาคือฉันจะสร้างขึ้น~/.ssh/authorized_keysโดยใช้รากเพื่อเป็นเจ้าของ ฉันต้องchown sshuser:sshuser ~/.ssh/authorized_keysเริ่มทำงานแล้ว


1

ฉันก็ต้องเผชิญกับข้อผิดพลาดนี้และแก้ไขได้โดยการเปลี่ยนสิทธิ์ของไฟล์ authorized_keys 600ไป

chmod 600 ~/.ssh/authorized_keys

1

ข้อผิดพลาดทั่วไปคือผู้ใช้ตัวแก้ไขข้อความ (เช่น Vim) และวางข้อความที่คัดลอกก่อนเปิดใช้งาน "แทรก" (กด + i ใน Vim ก่อนวาง)



0

การ debug open ssh หนึ่งสามารถใช้:

sudo `which sshd` -p 2020 -Dd

มันรัน sshd ที่พอร์ตอื่น 2020 มันรัน sshd เป็นโปรแกรมปัจจุบันดังนั้นเอาท์พุทไปที่หน้าจอ ถ้าปิดมันจะปิด

จากนั้นลองเชื่อมต่อ

คำอธิบาย:

  • `sshd` อันใด - หาที่อยู่ sshd ลองใช้ sshd ดูว่ามันพิมพ์อะไร เมื่อใช้เครื่องหมายคำพูดย้อนกลับจะดำเนินการและส่งคืนผลลัพธ์
  • -p 2020 - ระบุพอร์ต
  • -D - บันทึกลงไฟล์
  • -d - เข้าสู่หน้าจอ

https://www.attachmate.com/documentation/rsit-unix-802/rsit-unix-guide/data/sshd_options_ap.htm


คุณช่วยขยายคำตอบนี้ได้ไหม? อะไรคือข้อโต้แย้ง คำสั่งทำอะไร (สำหรับคนที่ไม่เคยมีประสบการณ์)?
Zzzach ...

-1

ฉันกำลังสร้างไฟล์. ssh และ authorized_keys ขณะที่เข้าสู่ระบบในฐานะ root ซึ่งให้สิทธิ์ที่ไม่ถูกต้อง นอกจากนี้ยังวางไฟล์ทั้งหมดไว้ในไดเรกทอรีราก

การเปลี่ยนความเป็นเจ้าของไฟล์เหล่านั้นเป็นผู้ใช้ที่คุณต้องการจะไม่เป็นการปฏิบัติที่ดีดังนั้นฉันจึงย้อนขั้นตอนของฉันและทำให้แน่ใจว่าฉันเข้าสู่ระบบในฐานะผู้ใช้ที่ฉันต้องการใช้ SSH ด้วยและสร้าง. ssh และ authorized_keys อีกครั้ง

คำแนะนำในการเชื่อมต่อเซิร์ฟเวอร์ Win7 กับ Xubuntu 15.04: วิธีสร้างคีย์ SSH โดยใช้ Putty เพื่อเชื่อมต่อกับ VPS

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