ssh ไม่ขอรหัสผ่าน


14

อย่างใด SSH ของฉันไม่ต้องการที่จะขอรหัสผ่าน

ดังนั้นฉันจึงติดตั้ง VPS บนเซิร์ฟเวอร์สุ่มบางแห่งในโลกและฉันต้องการเชื่อมต่อกับเซิร์ฟเวอร์ด้วย ssh

ฉันสามารถตั้งค่าคีย์ได้ แต่เมื่อฉันทำสิ่งนี้:

ssh -l some-user IP

ฉันได้รับข้อผิดพลาด:

Received disconnect from ##.##.##.##: 2: Too many authentication failures for some-user

เมื่อฉันดูรายละเอียดฉันจะเห็นว่ารหัสผ่านเป็นหนึ่งในตัวเลือก:

debug1: Offering RSA public key: some-user@computer
debug1: Authentications that can continue: publickey,password

ยัง SSH ไม่เคยถามรหัสผ่าน มันพยายาม 5 ครั้งด้วยสิ่งที่ฉันสงสัยว่าเป็นวิธี publickey แล้วล้มเหลว ทำไมถึงไม่ลองรหัสผ่าน?!

ในกรณีที่ไฟล์ ssh_config ของฉันมี:

PasswordAuthentication yes

บันทึกเต็ม

ssh -v -l root ##.##.##.##
OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /home/someuser/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to ##.##.##.## [##.##.##.##] port 22.
debug1: Connection established.
debug1: identity file /home/someuser/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/someuser/.ssh/id_rsa-cert type -1
debug1: identity file /home/someuser/.ssh/id_dsa type -1
debug1: identity file /home/someuser/.ssh/id_dsa-cert type -1
debug1: identity file /home/someuser/.ssh/id_ecdsa type -1
debug1: identity file /home/someuser/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.2p2 Ubuntu-6
debug1: match: OpenSSH_6.2p2 Ubuntu-6 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.1p1 Debian-4
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA XX:XX:...:XX:XX
debug1: Host '##.##.##.##' is known and matches the ECDSA host key.
debug1: Found key in /home/someuser/.ssh/known_hosts:38
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/someuser/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
Received disconnect from ##.##.##.##: 2: Too many authentication failures for root

คำตอบ:


17

ลองลงชื่อเข้าใช้โดยปิดใช้งานการรับรองความถูกต้องของคีย์สาธารณะโดยใช้

ssh -o PubkeyAuthentication=no root@newserver

ตกลง! นั่นได้ผล! ฉันลอง "ตรงกันข้าม" ไม่สำเร็จ ... (เช่น-o PasswordAuthentication=yes) แต่นี่คือสิ่งที่ฉันกำลังมองหา
Alexis Wilke

3
@AlexisWilke ฉันดีใจที่มันใช้งานได้! แต่โปรดอ่านคำตอบของ Olli ด้วย .ssh/configเขาแน่นอนที่เหมาะสมในการที่ยังคงมีสิ่งผิดปกติกับคุณ การ-o PubkeyAuthentication=noแก้ปัญหาถาวรไม่ดี
Klaus-Dieter Warzecha

เคล็ดลับนี้ (-o PubkeyAuthentication = no) ทำงานได้ดีบนเครื่องที่มีไฟล์ประจำตัวหลายไฟล์
Valerio Schiavoni

17

ส่วนใหญ่คุณอาจมีมากกว่าหนึ่งidentityfileบรรทัดในของคุณ.ssh/configไฟล์

แม้ว่าคุณจะidentityfileอยู่ภายใต้hostการกำหนดค่ามันจะถูกนำไปใช้ทั่วโลก หมายความว่าอะไรที่sshพยายามทุกไฟล์ข้อมูลประจำตัว (เช่นกุญแจสาธารณะ) ในทุก ๆ โฮสต์ก่อนที่จะขอรหัสผ่านจากเซิร์ฟเวอร์

คุณสามารถแก้ไขได้โดย

  1. การลบทั้งหมดยกเว้นหนึ่งidentityfileบรรทัดหรือ
  2. กำลังเพิ่มPubkeyAuthentication noไปยัง.ssh/configหรือ
  3. กำลังดำเนินการ ssh ด้วย-o PubkeyAuthentication=noพารามิเตอร์

จากman 5 ssh_config:

PubkeyAuthentication
    Specifies whether to try public key authentication.  The argument to this
    keyword must be “yes” or “no”.  The default is “yes”.  This option applies 
    to protocol version 2 only.

IdentityFile
    ...
    It is possible to have multiple identity files specified in configuration
    files; all these identities will be tried in sequence.  Multiple 
    IdentityFile directives will add to the list of identities tried (this 
    behaviour differs from that of other configuration directives).

คำแนะนำทั่วไปพร้อมกุญแจสาธารณะ:

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

มีข้อยกเว้นบางประการ แต่ไม่มากเกินไป


2
Aaah! ฉันมีไฟล์ระบุ "มากเกินไป" และตรวจสอบกับ 5 ไฟล์และหยุด เข้าใจแล้ว! นั่นอธิบายทุกอย่าง ฉันคิดว่าฉันควรย้ายสิ่งเหล่านั้นทั้งหมดในโฟลเดอร์ย่อยเพื่อที่พวกเขาจะไม่ถูกค้นพบโดยอัตโนมัติและฟีเจอร์รหัสผ่านจะทำงานโดยอัตโนมัติอีกครั้ง ...
Alexis Wilke

3
หากเป็นไปได้คุณควร / สามารถใช้รหัสสาธารณะเพียงคีย์เดียวสำหรับทุกบริการที่คุณต้องการ ไม่ค่อยมีเหตุผลที่จะทำในวิธีอื่นใด หากมีคนขโมยกุญแจสาธารณะของคุณ (เนื้อหาของauthorized_keys) พวกเขาไม่สามารถทำอะไรกับมันได้ และหากคีย์ส่วนตัว ( id_rsa/ id_dsa) ทั้งหมดของคุณอยู่ในคอมพิวเตอร์เครื่องเดียวกันการใช้มากกว่าหนึ่งจะไม่สำคัญ
Olli

4

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


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

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