เซิร์ฟเวอร์ขอรหัสผ่านหลังจากที่ฉันคัดลอกคีย์สาธารณะ SSH ไปที่ authorized_keys แล้ว


44

ฉันมีเซิร์ฟเวอร์ Ubuntu ที่ทำงานในคลาวด์ ฉันสร้างผู้ใช้ ( git) ในโฟลเดอร์/home/gitฉันได้สร้าง.ssh/dir และauthorized_keysไฟล์

แต่เมื่อฉันใส่รหัสสาธารณะ SSH ของฉันลงในauthorized_keysเซิร์ฟเวอร์เซิร์ฟเวอร์จะถามรหัสผ่านต่อไป

ฉันทำผิดอะไร?


คุณทำให้รัฐปูร์แก่ที่ไหน ในผู้ใช้คอมไพล์หรือในราก? คุณเห็นด้วยได้อย่างไร ในฐานะที่เป็น ssh <you> @ <server> o <git> @ <server> หรือรูท @ <server> .. ตรวจสอบและเพิ่มข้อมูลเพิ่มเติม
maniat1k

คำตอบ:


42

ทางฝั่งเซิร์ฟเวอร์ ssh daemon จะเข้าสู่ระบบข้อผิดพลาด/var/log/auth.logดังนั้นให้ตรวจสอบไฟล์นั้นเพื่อดูว่ามีรายงานอะไรบ้าง

จากฝั่งไคลเอ็นต์เมื่อสร้างการเชื่อมต่อคุณสามารถเพิ่มการ-vตั้งค่าสถานะ (หรือ-vvหรือ-vvv) เพื่อเพิ่มการใช้คำฟุ่มเฟื่อย คุณอาจระบุปัญหาของคุณได้ด้วยวิธีนี้

นี่คือสิ่งอื่น ๆ ที่ต้องตรวจสอบ

  • ให้แน่ใจว่าเป็นเจ้าของโดย/home/git/.ssh/authorized_keysgit
  • ตรวจสอบว่า/home/git/.ssh/authorized_keysมีโหมด 600 ( -rw-------)

ตรวจสอบ/etc/ssh/sshd_configไฟล์ด้วย

  • PubkeyAuthentication ควรตั้งเป็น yes
  • นอกจากนี้ยังมีAuthorizedKeysFileคำสั่งที่กำหนดเส้นทางที่คีย์ที่ได้รับอนุญาตควรจะอยู่ %h/.ssh/authorized_keysตรวจสอบให้แน่ใจก็ออกความเห็นหรือเริ่มต้นของ

ขอขอบคุณ! ฉันจะลองตัวเลือกนี้และกลับมาตอบรับภายหลัง!
Luis Dalmolin

คุณจะทำอย่างไรถ้าคุณไม่เห็น/var/log/auth.logไฟล์ มีวิธีเปิดใช้หรือไม่
Steve Robbins

1
บันทึกอาจอยู่ใน / var / log / ปลอดภัยหากคุณไม่มี /var/log/auth.log
CoverosGene

ข้อผิดพลาดโง่ฉันมี scp-ed ไฟล์. pub เพียงแค่อยู่ในโฟลเดอร์. ssh บนเซิร์ฟเวอร์ที่ฉันต้องการเชื่อมต่อ ตรวจสอบให้แน่ใจว่าได้ย้ายมันไปไว้ในโฟลเดอร์ที่ได้รับอนุญาต
CenterOrbit

ฉันต้องลบสิทธิ์การเขียนกลุ่มออกจากโฮมไดเร็กตอรี่ของฉันด้วย จากนั้นฉันรีสตาร์ท ssh ด้วยsudo service ssh restart
Dylan Pierce

19

นอกจากนี้ตรวจสอบให้แน่ใจว่าไดเรกทอรีบ้านผู้ใช้ของคุณ (ในกรณีของคุณ / home / git) เขียนได้โดยคุณเท่านั้น ฉันมีปัญหานี้เพียงครั้งเดียวเพราะไดเรกทอรีบ้านของฉันเขียนได้เป็นกลุ่ม /var/log/auth.log พูดใน: "รับรองความถูกต้องปฏิเสธ: ความเป็นเจ้าของหรือโหมดที่ไม่ดีสำหรับไดเรกทอรี / home / chuck" (นี่คือเพื่อให้แน่ใจว่าจะไม่ใช้ไฟล์ authorized_keys ที่บุคคลอื่นที่ไม่ใช่คุณยุ่งกับ!)


ขณะนี้เป็นประโยชน์อย่างแน่นอนผมคิดว่านี่เป็นมากขึ้นนอกเหนือไปจากคำตอบของ xeyes
gertvdijk

1
โอ้พระเจ้าขอบคุณมาก! ตาของฉันร้อนแรงเพราะการค้นหาทั้งหมดที่ฉันทำบน google ในที่สุดมันก็ใช้งานได้! ขอบคุณมาก.
GTRONICK

ขอบคุณชาย! ฉันใช้เวลาหลายชั่วโมงในการค้นหาวิธีแก้ปัญหา ... และนี่ช่วยแก้ไขปัญหาทั้งหมดของฉันได้
Afaria

ได้. นั่นมัน ดีใจที่ฉันตัดสินใจอ่านคำตอบต่อไป
Katushai

ตรวจสอบใน/ etc / passwdคืออะไรโฮมไดเร็กตอรี่ของผู้ใช้. ปัญหาที่แปลกประหลาดของฉันคือมันไม่ได้เป็นมาตรฐาน
drodsou

5

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

ในการสร้างssh(ฝั่งไคลเอ็นต์) โดยใช้การพิสูจน์ตัวตน pubkey ให้เพิ่มตัวเลือกบางอย่างลงในsshคำสั่ง:

ssh -o PubkeyAuthentication=yes -o PasswordAuthentication=no -X git@server

หากใช้งานได้คุณสามารถตั้งค่าPasswordAuthentication=noตัวเลือกได้อย่างถาวรใน ssh client config file ทั้ง/etc/ssh/ssh_configระบบหรือ~/.ssh/configเฉพาะผู้ใช้ (ตามรายละเอียดดูman ssh_config)


1
โดยค่าเริ่มต้นการกำหนดค่าไคลเอนต์ SSH ทั้งหมด ( /etc/ssh/ssh_config) บนระบบ Debian / Ubuntu แล้วต้องการ PubkeyAuthenticationและลองก่อนว่าคุณจะเห็นเมื่อเรียกใช้sshในโหมด verbose
gertvdijk

3

คุณใช้ ~ / .ssh / config บนเครื่องของคุณหรือไม่? ฉันพบปัญหานี้เมื่อฉันใช้คำสั่ง IdentityFile ในไฟล์ปรับแต่งแล้วชี้ไปที่คีย์สาธารณะ ตัวอย่างเช่น:

Host Cloud
    Hostname cloud.theclouds.com
    User git
    IdentityFile ~/.ssh/config/mykey # This is correct

    # IdentityFile ~/.ssh/config/mykey.pub # This is incorrect

2

หากโฟลเดอร์หลักของคุณถูกเข้ารหัสauthorized_keysไฟล์ของคุณจะไม่สามารถอ่านได้ก่อนเข้าสู่ระบบ คุณต้องย้ายมันออกไปนอกบ้าน

นี่คือคำอธิบายและวิธีการทำ: https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Troubleshooting


1

สิ่งที่ต้องตรวจสอบอีกอย่างคือว่ามีการคืนค่าขนส่งพิเศษในกุญแจสาธารณะของคุณหรือไม่ ฉันทำตามคำแนะนำด้านบนเพื่อตรวจสอบ /var/log/auth.log และเห็นข้อผิดพลาดเมื่ออ่านคีย์ กุญแจยาวประมาณสองบรรทัดแทนที่จะเป็นสี่บรรทัด มีการรับคืนรถพิเศษฝังอยู่ในคีย์

เมื่อใช้เอดิเตอร์ vi ให้ใช้ shift-j เพื่อเข้าร่วมบรรทัดและลบพื้นที่พิเศษในสตริงคีย์


1
sshd_configผมสามการตรวจสอบสิทธิ์และ กระแทกหัวของฉันกับผนังเป็นเวลาครึ่งชั่วโมง นี่เป็นความผิดพลาดของฉัน! อย่างใดฉันได้กลายเป็นนิสัยของการสิ้นสุดไฟล์ทั้งหมดที่ฉันแก้ไขด้วย linebreak พิเศษ แม้ว่าจะมีหนึ่งคีย์และการรับคืนในตอนท้ายแต่ก็เพียงพอที่จะทำให้การอนุมัติเสียหาย
jrhorn424

ตรวจสอบให้แน่ใจว่าคุณมีคีย์ ----- END RSA PRIVATE ----- บิตเช่นกัน
tobych

1

หากคุณมีไพรเวตคีย์หลายตัวให้ใช้สวิตช์ -v บนคำสั่งการเชื่อมต่อ ssh ของคุณเพื่อตรวจสอบเพื่อดูว่าคีย์หลักอื่นของคุณเป็น uesd เพื่อพยายามเชื่อมต่อหรือไม่ หากไม่ใช่ให้บอกไคลเอ็นต์ ssh เพื่อใช้กับคำสั่งต่อไปนี้:

ssh-add path/to/private/key

1

คุณยังสามารถเพิ่มกุญแจของคุณไปยังตัวแทน SSH:

u@pc:~$ ssh-agent bash
u@pc:~$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/u/.ssh/id_rsa: # ENTER YOUR PASSWORD
Identity added: /home/u/.ssh/id_rsa (/home/u/.ssh/id_rsa)

0

อาจเป็นได้ว่าคุณกำลังโทร

sudo git clone gituser@domain:repo.git

ที่ผู้ใช้ราก SSH คีย์ยังไม่ได้รับการเพิ่มauthorized_keysของgituser


0

บนเครื่องที่ใช้ Ubuntu 18.04.02 LTS คำแนะนำในการตั้งค่าการอนุญาต~/.sshถึง 600 ไม่ได้ผลสำหรับฉัน ฉันต้องตั้งค่าการอนุญาตเป็น 700 จากนั้นก็ทำงานได้ดี


0

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

ฉันใช้ไฮไลต์ที่อิงกับเมาส์และคัดลอก / วางเพื่อคัดลอกข้อมูลจาก id_rsa.pub ในพื้นที่ของฉันลงในไฟล์ authorized_keys บนเซิร์ฟเวอร์ การคัดลอกข้อมูลนี้ประสบความสำเร็จในบรรทัดเดียว แต่มีช่องว่างที่ไม่ต้องการที่จุดสิ้นสุดของบรรทัดที่มองเห็นซึ่งมองเห็นได้ยากเมื่อแก้ไขไฟล์ด้วย vi เมื่อฉันลบช่องว่างที่ไม่ต้องการเหล่านี้ฉันก็สามารถทำได้ดี


0

ดังนั้นสิ่งที่เกิดขึ้นสำหรับฉันคือฉันมี VM 2 เครื่องเพื่อเข้าถึงจากเครื่องท้องถิ่นของฉัน (2 คีย์ id_rsa.pub และ id_rsa2.pub) ฉันรู้ว่าการเชื่อมต่อ ssh ของฉันใช้ id_rsa.pub เป็นค่าเริ่มต้นสำหรับการเชื่อมต่อ ssh user@xx.xx.xx.xx ใด ๆ ฉันแก้ไขปัญหาของฉันโดยเพิ่มไฟล์กำหนดค่าและระบุข้อมูลประจำตัวที่จะใช้สำหรับโฮสต์ทุกตัวดังนี้:

vi ~/.ssh/config

Add both hostnames and their identity file as follows:

Host server1.nixcraft.com
  IdentityFile ~/Users/.ssh/id_rsa1
Host server2.nixcraft.com
  IdentityFile /backup/home/aymen/.ssh/id_rsa2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.