มีการตรวจสอบสิทธิ์ล้มเหลวมากเกินไปสำหรับ * ชื่อผู้ใช้ *


256

ฉันมีบัญชี hostgator ที่เปิดใช้งานการเข้าถึง ssh เมื่อพยายามอัพโหลดไฟล์คีย์. pub ที่สร้างขึ้นด้วยคำสั่งนี้:

rsync -av -e "ssh -p2222" /home/user/.ssh/key.pub username@111.222.33.44:.ssh/authorized_keys

ฉันได้รับ:

ได้รับการยกเลิกการเชื่อมต่อจาก 111.222.33.44: 2: การรับรองความถูกต้องล้มเหลวมากเกินไปสำหรับชื่อผู้ใช้
rsync: การเชื่อมต่อปิดโดยไม่คาดคิด (ได้รับ 0 ไบต์แล้ว) [ผู้ส่ง]
ข้อผิดพลาด rsync: ข้อผิดพลาดที่ไม่ได้อธิบาย (รหัส 255) ที่ io.c (601) [ผู้ส่ง = 3.0.7]

ก่อนหน้านี้ฉันเล่นด้วย ssh จนกระทั่งได้รับความผิดพลาด แต่ตอนนี้ดูเหมือนว่าตัวนับความล้มเหลวในการตรวจสอบความถูกต้องไม่ได้รับการรีเซ็ต (รอมากกว่า 12 ชั่วโมงแล้วตอนนี้ฝ่ายสนับสนุนด้านเทคโนโลยี "รีเซ็ต" จะรีเซ็ตหลังจาก 30 นาทีถึง 1 ชั่วโมงและผู้ชายอีกคนบอกฉันว่า "รีเซ็ตทุกครั้งที่คุณพยายามลงชื่อเข้าใช้ด้วย ชื่อผู้ใช้ ", jeesh)

นี่คือการขับรถฉันถั่ว ฉันยังตั้งค่านี้ในเซิร์ฟเวอร์ที่กำหนดเอง Slicehost และมีปัญหาน้อยกว่าพวกเหล่านี้

เคล็ดลับใด ๆ อาจเป็นฝั่งไคลเอ็นต์ไม่ใช่ฝั่งเซิร์ฟเวอร์


ในกรณีของฉันมีความผิดพลาดในการสร้างรหัส ฉันสร้างรหัสและไม่ได้พูดถึงที่อยู่แหล่งที่มาและใช้ชื่อผู้ใช้เมื่อสิ้นสุดคีย์
นักข่าว

คำตอบ:


416

ซึ่งมักเกิดจากการเสนอหลายคีย์ sshไปยังเซิร์ฟเวอร์โดยไม่ได้ตั้งใจ เซิร์ฟเวอร์จะปฏิเสธคีย์ใด ๆ หลังจากมีการเสนอคีย์มากเกินไป

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

เพื่อป้องกันการเสนอคีย์ที่ไม่เกี่ยวข้องคุณต้องระบุสิ่งนี้อย่างชัดเจนในทุกรายการโฮสต์ในไฟล์~/.ssh/config(บนเครื่องไคลเอนต์) โดยเพิ่มIdentitiesOnlyดังนี้:

Host www.somehost.com
  IdentityFile ~/.ssh/key_for_somehost_rsa
  IdentitiesOnly yes
  Port 22

หากคุณใช้ ssh-agent จะช่วยให้ssh-add -Dสามารถล้างข้อมูลประจำตัวได้

หากคุณไม่ได้ใช้การกำหนดค่าโฮสต์ ssh ใด ๆ คุณต้องระบุคีย์ที่ถูกต้องในsshคำสั่งดังนี้:

ssh -i some_id_rsa -o 'IdentitiesOnly yes' them@there:/path/

หมายเหตุ: พารามิเตอร์ 'IdentitiesOnly yes' จำเป็นต้องอยู่ระหว่างเครื่องหมายคำพูด

หรือ

ssh -i some_id_rsa -o IdentitiesOnly=yes them@there:/path/

5
ยังไม่ชัดเจนสำหรับฉันที่จะวางสายนี้ บนเซิร์ฟเวอร์ที่ฉันพยายามเข้าสู่ระบบ, .ssh / config มีข้อมูลสำหรับเซิร์ฟเวอร์อื่นเท่านั้น คุณหมายความว่าสิ่งนี้ควรอยู่ในไฟล์. ssh / config บนคอมพิวเตอร์ที่ฉันพยายามใช้ ssh หรือไม่ ถ้าเป็นเช่นนี้ไม่ชัดเจนเพราะคำตอบของคุณบอกว่า "เมื่อคุณลงชื่อเข้าใช้อีกครั้ง ... "
David LeBauer

2
ฉันต้องใส่ตัวเลือกในราคาคู่เช่นนี้ssh -i some_id_rsa -o "IdentitiesOnly yes" them@there:/path/
KNB

1
ผู้ใช้ Windows ที่ใช้ PAGENT (Putty Agent) ตรวจสอบเพื่อให้แน่ใจว่าคุณมีคีย์ที่คุณต้องการเท่านั้น ฉันพบปัญหานี้หลังจากโหลดกุญแจส่วนตัวของฉันโดยไม่ได้ตั้งใจ
Chris Rasco

2
คำถามยังคงอยู่: ทำไมssh"เสนอหลายคีย์" (อะไรก็ตามภายใต้~/.ssh) แม้ว่ากฎสำหรับโฮสต์จะมีการIdentityFile /path/to/private_key_fileตั้งค่าที่ชัดเจน คีย์นี้ที่ระบุไว้อย่างชัดเจนควรเป็นข้อเสนอ (อย่างน้อยที่สุด) หรือไม่ นี่ไม่ใช่ข้อผิดพลาด / การทำงานผิดพลาดในไคลเอ็นต์ openssh หรือไม่
arielf

2
แต่ไม่ควรใช้รหัสที่ระบุพร้อมIdentityFileตัวเลือกใช่หรือไม่ ยกตัวอย่างเช่นโดยไม่มีIdentitiesOnlyตัวเลือกก็พยายามที่จะใช้ของฉันสำคัญเมื่อฉันพยายามที่จะgithub ssh gitlab.comมันไม่มีเหตุผล
Iulian Onofrei

188

ฉันพบวิธีที่ง่ายกว่าในการทำเช่นนี้ (หากใช้การตรวจสอบรหัสผ่าน):

ssh -o PubkeyAuthentication=no username@hostname.com

สิ่งนี้บังคับใช้การพิสูจน์ตัวตนที่ไม่ใช่คีย์ ฉันสามารถเข้าสู่ระบบได้ทันที

การอ้างอิง


3
+1 หวังว่าฉันจะให้คุณมากกว่านี้ Raspberry Pi เป็นอุปกรณ์เดียวที่ฉันไม่มีในที่สาธารณะโดยใช้กุญแจสาธารณะ ได้รับ: "มีการรับรองความถูกต้องล้มเหลวมากเกินไปสำหรับ pi"
blak3r

1
และใช้กับrsync:rsync -av -e 'ssh -o PubkeyAuthentication=no' 'user@host.com:~/remote_file' 'local_file'
Ciro Santilli 新疆改造中心法轮功六四事件

1
นอกจากนี้คุณยังสามารถสร้างนามแฝงเพื่อให้รหัสผ่านได้เร็วขึ้น alias sshp = 'ssh -o PubkeyAuthentication = no'
dhempler

26

ฉันได้รับข้อผิดพลาดนี้ด้วยและพบว่ามันเกิดขึ้น b / c เซิร์ฟเวอร์ได้รับการกำหนดค่าให้ยอมรับได้ถึง 6 ครั้ง:

/etc/ssh/sshd_config
...
...
#MaxAuthTries 6

นอกเหนือจากการตั้งค่าIdentitiesOnly yesใน~/.ssh/configไฟล์ของคุณคุณมีตัวเลือกอื่นสองสามตัว

  1. เพิ่มMaxAuthTries(บนเซิร์ฟเวอร์ ssh)
  2. ลบคู่กุญแจที่คุณมีอยู่ใน~/.ssh/ไดเรกทอรี & runssh-add -D
  3. ลิงก์คีย์ไปยังโฮสต์ที่ระบุใน~/.ssh/configไฟล์ของคุณอย่างชัดเจน

ชอบมาก

host foo
hostname foo.example.com
IdentityFile /home/YOU/.ssh/foo
  1. อาจไม่ใช่วิธีที่ดีในการทำเช่นนี้เนื่องจากมันทำให้เซิร์ฟเวอร์ SSH ของคุณอ่อนลงเล็กน้อยเนื่องจากตอนนี้มันจะยอมรับปุ่มเพิ่มเติมในการพยายามเชื่อมต่อที่กำหนด คิดถึงเวกเตอร์พลังโจมตีแบบดุร้ายที่นี่

  2. เป็นวิธีที่ดีที่จะสมมติว่าคุณมีคีย์ที่ไม่ต้องการและสามารถลบได้อย่างถาวร

  3. และวิธีการตั้งค่า IdentitiesOnly อาจเป็นวิธีที่ต้องการในการจัดการกับปัญหานี้!


ในบรรทัดสุดท้ายของคุณคุณมี identifyfile /home/YOU/.ssh/foo แต่ควรจะ identityfile (ที่ไม่ได้เป็นฉ)
นิน

7

ฉันเพิ่มใน ~ / .ssh / config สิ่งนี้:

Host *
IdentitiesOnly yes

จะเปิดใช้งานตัวเลือก IdentitiesOnly = ใช่โดยค่าเริ่มต้น หากคุณต้องการเชื่อมต่อกับกุญแจส่วนตัวคุณควรระบุด้วยตัวเลือก -i


6

หากคุณได้รับข้อผิดพลาด SSH ต่อไปนี้:

$ Received disconnect from host: 2: Too many authentication failures for root

สิ่งนี้สามารถเกิดขึ้นได้หากคุณมี (ค่าเริ่มต้นในระบบของฉัน) ไฟล์ข้อมูลระบุตัวตน DSA / RSA ห้าไฟล์ขึ้นไปที่จัดเก็บในไดเรกทอรี. ssh ของคุณและหากไม่ได้ระบุตัวเลือก '-i' ที่บรรทัดคำสั่ง

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

หากคุณมีคีย์ส่วนตัวจำนวนหนึ่งในไดเรกทอรี. ssh คุณสามารถปิดใช้งาน "การรับรองความถูกต้องของคีย์สาธารณะ" ที่บรรทัดคำสั่งโดยใช้อาร์กิวเมนต์เผื่อเลือก '-o'

ตัวอย่างเช่น:

$ ssh -o PubkeyAuthentication=no root@host

นี่คือสิ่งที่เกิดขึ้นกับฉัน! ขอบคุณมากสำหรับคำอธิบาย;)
El Ninja Trepador

6

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

หากต้องการใช้การตรวจสอบรหัสผ่านเท่านั้นและไม่ใช้รหัสสาธารณะและไม่ใช้ "keyboard-interactive" ที่ทำให้เข้าใจผิด (ซึ่งเป็น superset รวมถึงรหัสผ่าน) คุณสามารถทำได้จากบรรทัดคำสั่ง:

ssh -o PreferredAuthentications=password user@example.com

3

เมื่อปิด @David ว่าให้เพิ่มส่วนนี้ IdentitiesOnly yes ใน. ssh / config ของคุณมันก็เหมือนกับssh -o PubkeyAuthentication=no.

.ssh/authorized_keysหลังจากที่คุณได้เข้าสู่ระบบลบ ตอนนี้กลับไปที่เครื่องโลคัลและพิมพ์ต่อไปนี้

cat ~/.ssh/id_rsa.pub | ssh -o PubkeyAuthentication=no user@IP_ADDR 'cat >> .ssh/authorized_keys'. นี่ควรเปิดใช้งาน ssh ของคุณอีกครั้งด้วยกุญแจสาธารณะ


2

ฉันรู้ว่านี่เป็นเธรดเก่า แต่ฉันต้องการเพิ่มที่นี่ที่ฉันวิ่งเข้าไปในข้อความแสดงข้อผิดพลาดเดียวกัน แต่มันเกิดจากเจ้าของโฟลเดอร์. ssh เป็น root แทนที่จะเป็นผู้ใช้ที่ใช้คีย์ ฉันแก้ไขปัญหาโดยเรียกใช้คำสั่งต่อไปนี้:

sudo chown -R user:user /home/user/.ssh

ฉันยังทำให้แน่ใจว่าการอนุญาตนั้นถูกต้องในโฟลเดอร์. ssh:

sudo chmod 700 /home/user/.ssh

ไฟล์ภายในไดเร็กทอรี. ssh ควรได้รับอนุญาต 600:

sudo chmod 600 /home/user/.ssh/authorized_keys

ฉันจะระมัดระวังการใช้สิ่งนี้โดยไม่มีข้อแม้ การอนุญาตคีย์ SSH มักจะถูก จำกัด ที่ 400 สำหรับบางคีย์โดยเฉพาะ AWS การพยายามตั้งค่าไว้ด้านบนซึ่งจะทำให้รหัสไม่ได้รับการยอมรับและสามารถล็อคคุณออกจากบัญชี AWS ของคุณ
Michael Ryan Soileau

1

ในกรณีของฉันปัญหาคือสิทธิ์ของไดเรกทอรี นี้แก้ไขให้ฉัน:

$ chmod 750 ~;chmod 700 ~/.ssh

0

ในกรณีของฉันมันเกิดขึ้นเพราะฉันใช้ชื่อผู้ใช้ "อูบุนตู" แต่ชื่อผู้ใช้ในอินสแตนซ์นี้คือ "ผู้ใช้ ec2"

หลังจากที่ฉันทำตามคำแนะนำของ "John T" ฉันได้รับข้อผิดพลาดนี้:

ปฏิเสธการอนุญาต (publickey)

จากนั้นฉันพบวิธีแก้ปัญหา (เช่นเปลี่ยนชื่อผู้ใช้เป็น "ผู้ใช้ ec2") ในคำตอบนี้: https://stackoverflow.com/questions/1454629/aws-ssh-access-permission-denied-publickey-issue


0

ฉันมีกุญแจสาธารณะของฉัน.ssh/authorized_keys2แต่เซิร์ฟเวอร์ถูกกำหนดค่าให้อ่านอย่างเดียว.ssh/authorized_keys:

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys

หลังจากย้ายไฟล์ของฉันไปที่.ssh/authorized_keysฉันสามารถเข้าสู่ระบบด้วยกุญแจของฉัน


0

การรับรองความถูกต้องล้มเหลวมากเกินไป

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

นี่เป็นคำแนะนำเล็กน้อย:

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

    โพสต์ที่เกี่ยวข้อง: การเชื่อมต่อสำหรับsshd_configขีด จำกัด 'MaxAuthTries' คืออะไร

  • หากไม่มีความช่วยเหลือนี้ให้ตรวจสอบว่าคุณใช้ข้อมูลรับรองหรือไฟล์ที่ถูกต้อง


-1

ข้อความนี้จะปรากฏขึ้นเมื่อไม่ได้ป้อนชื่อผู้ใช้และรหัสผ่านที่ถูกต้อง

ตรวจสอบก่อนว่าผู้ใช้อยู่ในรายการ:

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