ssh พร้อมท์ให้ใส่รหัสผ่านแม้จะมี ssh-copy-id


28

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


1
serverfault.com/questions/208181/...ผมไม่แน่ใจว่าสิ่งที่นโยบาย StackExchange ในรายการที่ซ้ำกันในเว็บไซต์ถูก แต่ก็ไม่ได้ดูเหมือนกับผมว่าข้ามโพสต์คำถามจะเป็นประโยชน์
ephemient

หากคุณได้ตรวจสอบที่เดียวที่คุณสามารถเขียน~, ~/.sshและ~/.ssh/authorized_keysวิ่งssh -vvv server.example.comและรายงานการส่งออก (anonymize โฮสต์และผู้ใช้ชื่อถ้าคุณต้องการ) หากคุณมีการเข้าถึงรูทบนเซิร์ฟเวอร์ให้ดูที่รายการบันทึกที่สร้างขึ้นเมื่อคุณพยายามเข้าสู่ระบบกุญแจสาธารณะ
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


32

sshd ได้รับแปลกเกี่ยวกับการอนุญาตใน $ HOME, $ HOME / .ssh (ทั้งไดเรกทอรี) และใน $ HOME / .ssh / authorized_keys

หนึ่งในกล่อง linux ของฉันจบลงด้วยสิทธิ์ drwxrwxrwx ในไดเรกทอรี $ HOME ของฉัน กล่อง Arch linux จะไม่เข้าสู่ระบบโดยใช้กุญแจสาธารณะจนกว่าฉันจะลบการอนุญาต 'w' สำหรับกลุ่มอื่น ๆ ในไดเรกทอรี $ HOME ของฉัน

ลองสร้าง $ HOME และ $ HOME / .ssh / มีสิทธิ์ จำกัด มากขึ้นสำหรับกลุ่มและอื่น ๆ ดูว่ามันไม่ปล่อยให้ sshd ทำสิ่งนั้น


4
ได้. ssh-copy-idควรจะได้รับการดูแลสิทธิ์ของ~/.sshและ~/.ssh/authorized_keysแต่ยังทำให้แน่ใจว่าไดเรกทอรีที่บ้านของคุณเองไม่ได้เป็นกลุ่มที่สามารถเขียนได้
Gilles 'หยุดชั่วร้าย'

7
นี่มันสำหรับฉัน ฉันใช้ ssh-copy-id เพื่อส่งผ่านคีย์ RSA และฉันยังคงได้รับแจ้ง การเรียกใช้chmod g-w homedirเซิร์ฟเวอร์ระยะไกลทำงานได้อย่างมีเสน่ห์
Ben Kreeger


5

ฉันเพิ่งพบปัญหานี้เช่นกัน

มันได้รับการแก้ไขโดยการแก้ไขสิทธิ์ของ$HOMEไดเรกทอรี อย่างไรก็ตามการเรียกใช้เพียงอย่างchmod g-w ~/เดียวไม่สามารถแก้ไขปัญหาได้ นอกจากนี้chmod g-w ~/ฉันยังจำเป็นต้องปรับเปลี่ยนการอนุญาตothersใน$HOMEไดเรกทอรีโดยการเรียกใช้chmod o-wx ~/

ด้วยกัน:

chmod g-w ~/
chmod o-wx ~/

โปรดทราบว่าฉันไม่แน่ใจว่าo-xจำเป็นหรือไม่ฉันเพียง แต่วิ่งเพื่อเป็นการป้องกันไว้ก่อน



0

ปัญหาเกิดขึ้นกับการเข้าสู่ระบบแบบขนานเช่นถ้าคุณพยายามที่จะเมานท์ sshfs ในขณะที่มีเซสชั่นเปิด ssh? ถ้าไม่เช่นนั้นฉันจะเดาว่าคุณมีการเข้ารหัสไดเรกทอรีบ้านของคุณหรือไม่ ในกรณีนี้$HOME/.ssh/authorized_keysจะสามารถใช้งานได้บนเครื่องระยะไกลหลังจากเข้าสู่ระบบครั้งแรกของคุณ (โดยใช้รหัสผ่านของคุณ)

ลองดูที่https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Troubleshootingสำหรับคำอธิบายและวิธีแก้ไขปัญหาที่จำเป็น


0

ฉันจะโพสต์สิ่งนี้เป็นความคิดเห็น แต่อาจนานเกินไป ฉันแค่ต้องการเพิ่มที่ssh-copy-idพยายามส่งกุญแจสาธารณะจาก/.sshตำแหน่งภายใน$HOMEโฟลเดอร์ของคุณ

หากคุณพยายามที่จะsshรูทด้วยรหัสสาธารณะ (บันทึกความคิดเห็นที่เกี่ยวข้องกับความปลอดภัย) ssh-copy-idอาจพยายามเข้าสู่ระบบด้วยรหัสสาธารณะที่ไม่ถูกต้องหาก$HOMEตัวแปรของคุณถูกตั้งค่าเป็นอย่างอื่นนอกเหนือจาก/root(เช่นการตั้งค่าเป็นโฮมไดเรกทอรีผู้ใช้ปกติของคุณ ) ดังนั้นผู้ใช้รูทจะได้รับพร้อมต์เนื่องจากไม่ได้ติดตั้งคีย์สาธารณะของรูทบนระบบระยะไกล

คุณสามารถใช้หนึ่งบรรทัดต่อไปนี้เพื่อระบุคีย์สาธารณะที่แน่นอน:

pub="$(cat /root/.ssh/id_rsa.pub)"; ssh user@remotehost "echo $pub >> .ssh/authorized_keys; chmod 700 .ssh; chmod 600 .ssh/authorized_keys"

ฉันได้พบสถานการณ์นี้ในป่าสองสามครั้ง (รวมถึงเช้านี้) และคิดว่าฉันจะลองใส่ 2 เซนต์ของฉันในกรณีที่ใครก็ตามพบว่าตัวเองอยู่ในสถานการณ์เดียวกัน


0

เช่นเดียวกับผู้ให้ข้อมูลรายอื่นที่กล่าวถึงนี่อาจเป็นปัญหาสิทธิ์

วิธีที่ดีที่สุดในการวินิจฉัยสิ่งนี้คือการรีสตาร์ท SSH daemon บนเซิร์ฟเวอร์ระยะไกลด้วยตัวเลือกการแก้ปัญหาใน - โดยปกติตัวเลือก "-d" ข้อความ OpenSSH daemon ชัดเจนมาก ตัวอย่างเช่นคุณจะเห็นข้อความเช่น:

Authentication refused: bad ownership or modes for directory /some/path

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

0

เหตุผลที่รหัสสาธารณะไม่รอดจากการรีบู๊ตโพสต์คือไดเรกทอรีบ้านของเซิร์ฟเวอร์ของฉันถูกเข้ารหัส (คุณทำสิ่งนี้ขณะติดตั้งเซิร์ฟเวอร์)


0

ปัญหาที่เป็นไปได้อีกประการหนึ่งคือเซิร์ฟเวอร์ไม่รองรับอัลกอริธึมที่สำคัญของคุณ ในกรณีของฉันฉันพบข้อความต่อไปนี้ในsshdบันทึกของฉัน( /var/log/auth.logในกรณีของฉัน):

userauth_pubkey: unsupported public key algorithm: ssh-ed25519 [preauth]

หากเป็นกรณีนี้คุณต้องเปิดใช้งานการสนับสนุนสำหรับอัลกอริทึมนั้นในsshdการกำหนดค่าของคุณ(ซึ่งอาจต้องมีการอัปเดตเป็นsshdเวอร์ชันที่ใหม่กว่า) หรือคุณต้องเปลี่ยนรหัสของคุณเป็นอัลกอริทึมที่สนับสนุนโดยsshdคุณพยายามเชื่อมต่อ .


0

เนื่องจากคำถามนี้ปรากฏในผลลัพธ์การค้นหาแรกเมื่อ googling สำหรับพฤติกรรมนี้ฉันจะเพิ่มวิธีแก้ไขของฉันด้วย:

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

ssh -v username@your-host-ip-or-domain 

จากนั้นคุณเพิ่งคว้าเครื่องพับลิกคีย์สาธารณะใด ๆ ที่โปรแกรม SSH พยายามค้นหาไฟล์ระบุตัวตน / ไพรเวตคีย์สำหรับบน Mac เช่น:

cat ~/.ssh/id_rsa.pub

... และเพิ่มลงในไฟล์ authorized_keys ของรีโมตใน:

~/.ssh/authorized_keys

อีกวิธีหนึ่งในกรณีของฉันทางออกที่ดีกว่าคือการเพิ่มโฮสต์ที่กำหนดเองในไฟล์ ssh config ของฉัน บน Mac ของฉันมันคือ:

/Users/my-user-name/.ssh/config

ที่นี่คุณสามารถเพิ่มตัวอย่างเช่นนี้:

Host mynewserver
        HostName some.IP.number.or.domain
        Port 20000 #if custom port is used and not the default 22
        User the_root
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa_for_my_new_server

จากนั้นคุณเพียงแค่ต้องดำเนินการ:

ssh mynewserver

... และVoilà

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