รหัสสาธารณะ SSH จะไม่ส่งไปที่เซิร์ฟเวอร์


33

ฉันได้รับการดิ้นรนกับสิ่งนี้มาสองสามชั่วโมงดังนั้นความช่วยเหลือใด ๆ ที่ชื่นชมอย่างมาก ...

ฉันมี 2x เซิร์ฟเวอร์ซึ่งทั้งสองอย่างที่ฉันสามารถsshที่จะมีกุญแจสาธารณะจาก OSX sshd_configปัญหาที่ทุกคนมีดังนั้นผมมั่นใจทุกอย่างเป็นสิ่งที่ดีกับ

ฉันกำลังพยายามกำหนดค่างาน cron rsyncเพื่อซิงค์เซิร์ฟเวอร์ทั้งสองและต้องการเซิร์ฟเวอร์ B (สำรอง) ไปยังsshเซิร์ฟเวอร์ A โดยใช้รหัสสาธารณะ

ฉันไม่สามารถใช้ชีวิตของฉันได้เพราะเหตุใดจึงไม่พบกุญแจสาธารณะของฉัน - อยู่ใน~/.ssh/(เช่น. /root/.ssh) และการอนุญาตไฟล์ทั้งหมดนั้นถูกต้องใน A & B

นี่คือผลลัพธ์:

debug2: we did not send a packet, disable method
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/identity
debug3: no such identity: /root/.ssh/identity
debug1: Trying private key: /root/.ssh/id_rsa
debug3: no such identity: /root/.ssh/id_rsa
debug1: Trying private key: /root/.ssh/id_dsa
debug3: no such identity: /root/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password

โปรดทราบว่ากำลังมองหากุญแจส่วนตัวที่ไม่มีอยู่ ...

drwx------. 2 root root 4096 May 25 10:15 .
dr-xr-x---. 4 root root 4096 May 24 18:52 ..
-rw-------. 1 root root  403 May 25 01:37 authorized_keys
-rw-------. 1 root root    0 May 25 01:41 config
-rw-------. 1 root root 1675 May 25 02:35 id_rsa_tm1
-rw-------. 1 root root  405 May 25 02:35 id_rsa_tm1.pub
-rw-------. 1 root root  395 May 25 02:36 known_hosts

2
โปรดให้เราส่งออกของls -la /root/.ssh/
mreithub

@mreithub ขอบคุณสำหรับการตอบกลับอย่างรวดเร็ว - เพิ่มไว้ด้านบน
Danny

3
ลองเอา_tm1จากชื่อไฟล์สำคัญของคุณ (เช่นmv id_rsa_tm1 id_rsaและmv id_rsa_tm1.pub id_rsa.pub)
mreithub

@mreithub นั่นใช้ได้! ขอบคุณมาก แต่ฉันไม่เข้าใจว่าทำไมฉันจึงไม่สามารถต่อท้ายสตริงอื่น ๆ กับชื่อไฟล์ได้ ฉันทำเช่นนั้นบน iMac ของฉันเพื่อเชื่อมต่อกับเซิร์ฟเวอร์โดยไม่มีปัญหาใด ๆ ... เช่นฉันสามารถใช้ id_rsa.tm1.imac.pub ได้โดยไม่มีปัญหาใด ๆ ถ้าฉันต้องการคีย์หลายปุ่ม
Danny

คำตอบ:


22

ดูที่หน้าคนของคุณ:

   -i identity_file
          Selects a file from which the identity (private key) for public
          key authentication is read.  The default is ~/.ssh/identity for
          protocol   version   1,   and  ~/.ssh/id_dsa,  ~/.ssh/id_ecdsa,
          ~/.ssh/id_ed25519 and ~/.ssh/id_rsa  for  protocol  version  2.
          Identity files may also be specified on a per-host basis in the
          configuration file.  It is possible to have multiple -i options
          (and  multiple  identities  specified  in configuration files).

หรือหน้าคน ssh_config:

   IdentityFile
          Specifies a file from which the user's DSA, ECDSA,  ED25519  or
          RSA   authentication   identity   is   read.   The  default  is
          ~/.ssh/identity for  protocol  version  1,  and  ~/.ssh/id_dsa,
          ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for proto‐
          col version 2.  Additionally, any identities represented by the
          authentication  agent  will  be  used for authentication unless
          IdentitiesOnly is set.

คุณเห็นมีชื่อไฟล์พิเศษไม่กี่ไฟล์ที่จะลองถ้าคุณไม่ได้ระบุคีย์ นี่เป็นไฟล์ที่คุณเห็นในไฟล์บันทึกของคุณ

วิธีใช้คีย์ในไฟล์ที่มีชื่อแตกต่างกันคุณมีสามตัวเลือก:

  • ระบุไฟล์อย่างชัดเจนโดยใช้-iตัวเลือกด้านบน
  • กำหนดค่าไฟล์ในการกำหนดค่าไคลเอนต์ของคุณโดยใช้IdentityFileตัวเลือกข้างต้น
  • ssh-addเพิ่มกุญแจสำคัญที่จะเป็นตัวแทนของคุณโดยใช้

สำหรับเซสชันแบบโต้ตอบเอเจนต์มีความยืดหยุ่นมากที่สุด สำหรับงาน cron ของคุณ-iตัวเลือกน่าจะง่ายที่สุด


26

ไฟล์ authorized_keys ที่มีรูปแบบไม่ถูกต้องบนโฮสต์ปลายทางเป็นอีกสาเหตุที่ ssh แสดงข้อความ "เราไม่ได้ส่งแพ็กเก็ต" และขอรหัสผ่านแทนการใช้ pubkey auth: -

debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method

ปัญหาในกรณีนี้โดยเฉพาะคือข้อมูลสาธารณะคีย์ที่ถูกวางใน.ssh/authorized_keysโฮสต์ปลายทางหายไปอักขระแรก: -

sh-rsa AAAA...

วิธีแก้ไขคือเพียงเพิ่ม "s" ที่หายไป

ssh-rsa AAAA...

ดังนั้น: -

debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
...
debug1: Authentication succeeded (publickey).

2
ขอบคุณทุกครั้งที่ฉันได้รับข้อผิดพลาดนี้เป็นเพราะไฟล์ authorized_keys ของฉันบนรีโมตโฮสต์ (เซิร์ฟเวอร์) ผิดรูปแบบ ฉันหวังว่าข้อผิดพลาดไม่ได้ทำให้ดูเหมือนว่ามีปัญหากับลูกค้า
Tamal

3
การวางเป็นกลุ่มโดยไม่ต้องกด 'i' ก่อน!
Jordan Davidson

สำหรับฉันมันดูไม่ผิดปกติ แต่ฉันลบไฟล์และจากเครื่องต้นทางฉันทำ ssh-copy-id อีกครั้งเพื่อสร้างมันขึ้นมาใหม่ แก้ไขปัญหา.
alvarez

14

นี้สตริงที่แน่นอนของข้อความผิดพลาดในคำถามที่ยังสามารถเกิดขึ้นในกรณีที่พลาดจับคู่ส่วนตัว / คู่คีย์สาธารณะในด้านท้องถิ่น ไม่ว่าจะไม่มีเหตุผลใด ๆ แต่ฉันก็แค่ดึงผมออกมาเป็นเวลานานพยายามที่จะคิดออกว่าเกิดอะไรขึ้น

  • ระบบรีโมต A ได้.ssh/mykey.pubคัดลอกไป.ssh/authorized_keysแล้ว
  • โลคัลระบบ B .ssh/mykeyนั้นเป็นกุญแจส่วนตัวที่ถูกต้องเพื่อจับคู่กุญแจสาธารณะของระบบ A แต่ยังมี.ssh/mykey.pubไฟล์ที่พลาดการจับคู่ซึ่งอาจเป็นรุ่นก่อนหน้าของคีย์ที่ถูกแทนที่

SSH จาก B ถึง A ( ssh -i mykey A) จะล้มเหลวเมื่อมีข้อความในคำถามโดยเฉพาะอย่างยิ่งถ้าคุณเปิด-vvจากไคลเอ็นต์ ssh คุณจะเห็น:

กำลังลองคีย์ส่วนตัว: .ssh / mykey
เราไม่ได้ส่งแพ็กเก็ตปิดการใช้งานวิธี

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


ว้าว! อันนี้ก็ฆ่าเวลาฉันด้วยเช่นกัน! ผมบางหายไป! ดังนั้นในกรณีของฉันมันก็เป็นเช่นนี้มีเพียง Pub Key ของฉันเท่านั้นที่อยู่ในไฟล์ authorized_keys ฝั่งไคลเอ็นต์ยกเว้นมันรวมรายการ name @ host ที่ท้ายสุดซึ่งโฮสต์ sshd ของฉันไม่ได้ ฉันไม่ทราบว่าคุณต้องจับคู่คีย์ที่ได้รับอนุญาตในแต่ละปลายอันที่จริงฉันไม่คิดว่าฉันเคยจับคู่พวกเขามาก่อน นี่เป็นปัญหาเมื่อลูกค้าของฉันคือ CentOS 7 เชื่อมต่อกับ Ubuntu 12.04 การเปลี่ยนจาก MacOS หรือระบบ Ubuntu อื่น ๆ ใช้งานได้ดี
gregthegeek

ดังนั้นคุณจะแก้ไขปัญหานี้ได้อย่างไร คุณได้อธิบายปัญหาของฉันให้กับ T แล้วปัญหาของฉันก็ยิ่งทวีความรุนแรงมากขึ้นเพราะฉันกระโดดข้ามระหว่างระบบจำนวนหนึ่ง การระบุไฟล์ไม่ได้ผลสำหรับฉัน
จริงๆ

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

@Caleb ฟังดูง่ายกว่าที่เป็นเว้นแต่ (และฉันคิดว่าเพนนีลดลง) หมายความว่าฉันควรจะคัดลอกทั้งกุญแจสาธารณะและกุญแจส่วนตัวไปยังแต่ละระบบที่ฉันต้องการใช้เป็นลูกค้า SSH หรือไม่ ฉันได้พยายามสร้าง IdentityFile แต่ฉันเห็นได้ชัดโดยใช้มันผิด
Madivad

การลบไฟล์ id_rsa.pub orphaned บนไคลเอ็นต์แก้ปัญหานี้ให้ฉัน ฉันเพิ่งพบปัญหานี้อีกครั้งในไคลเอนต์ Centos 7 ใหม่ที่เชื่อมต่อกับเซิร์ฟเวอร์ Ubuntu 12.04 authorized_keys ปัญหาชื่อ @ host ไม่ได้แก้ไข ฉันจับคู่ไดเรกทอรี, perms, ไฟล์คีย์ id_rsa ที่เหมือนกันทุกประการ แต่มี id_rsa.pub พิเศษ (บนฝั่งไคลเอ็นต์) นำออกแล้วตอนนี้มันใช้งานได้ ฉันใช้ ssh-keygen เพื่อสร้างไดเรกทอรีอย่างรวดเร็วจากนั้น rsync จากระบบที่ดีที่รู้จัก แต่ที่เหลือไฟล์ pub พิเศษไม่ตรงกับกุญแจส่วนตัวใด ๆ (มันไม่ได้อยู่ในแหล่ง rsync) ฉันเพิ่มไฟล์ pub ที่ไม่ตรงกันเพื่อยืนยันอีกครั้ง ตรวจสอบให้แน่ใจตรงกันหรือลบ
gregthegeek

5

ชื่อแฟ้มเริ่มต้น SSH ที่กำลังมองหาอยู่และid_rsaid_rsa.pub

หากคุณต้องการที่จะใช้ชื่อไฟล์อื่น ๆ ที่คุณอาจจะต้องระบุไว้ในssh_config(โดยใช้IdentityFileการตั้งค่า) หรือผ่านทางจุ๊บรรทัดคำสั่ง-iพารามิเตอร์


4

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

sshd[2507]: Authentication refused: bad ownership or modes for directory /home/user

การแก้ไขสิทธิ์ผู้ใช้ในบ้านแก้ไขปัญหานี้


4
ยินดีต้อนรับสู่ไซต์แลกเปลี่ยน U + L คุณสามารถทำให้คำตอบของคุณเป็นประโยชน์กับผู้อื่นมากขึ้นโดยแสดงตัวอย่างของสิทธิ์ที่ถูกต้องควรมีลักษณะอย่างไร
Erathiel

ฉันมีปัญหาที่คล้ายกันมากยกเว้นกับ~/.sshdir อย่างน้อยใน Fedora 28 เมื่อ~/.sshสิทธิ์เป็น 0775 ฉันไม่สามารถเชื่อมต่อกับกุญแจสาธารณะ / ส่วนตัวได้ ดังนั้นผมจึงเปลี่ยนสิทธิ์การ 0755 และทำงานเช่นเสน่ห์ :)
PovilasB

3

วิธีง่าย ๆ ในการดีบักใน Debian / Ubuntu คือ: เชื่อมต่อด้วยรหัสผ่านและจัดทำบันทึก

tail -f /var/log/auth.log

ลองเชื่อมต่อจากเทอร์มินัลอื่นและคุณจะเห็นข้อผิดพลาด ...

ในกรณีของฉันไดเร็กทอรี / root คือ 770 และไม่ใช่ 700 ซึ่งเป็นค่าเริ่มต้นข้อผิดพลาดคือ "การรับรองความถูกต้องถูกปฏิเสธ: ความเป็นเจ้าของที่ไม่ดีหรือโหมดสำหรับไดเรกทอรี / รูท"

แก้ไขปัญหานี้และคุณทำเสร็จแล้ว


ขอบคุณมากมนุษย์! คุณบันทึกวันของฉัน!
Anthony

นั่นช่วยอธิบายให้ชัดเจน เหมืองแร่พูดsuchandsuch ผู้ใช้จาก 123.123.123.123 ไม่ได้รับอนุญาตเพราะไม่ได้อยู่ใน AllowUsers ขอบคุณมาก!
aexl


0

หลังจากวิ่ง

ssh-copy-id user@remote-host

ปกติมันควรจะทำงาน แต่ถ้ามันล้มเหลวให้ลองทำสิ่งนี้: ล็อกอินไปยังรีโมตโฮสต์ในฐานะผู้ใช้ที่คุณต้องการล็อกอินในอนาคตและรัน:

ssh-keygen

มันช่วยฉัน


0

ดังนั้นสิ่งที่เกิดขึ้นกับฉันก็คือฉันมี VM 2 เครื่องเพื่อเข้าถึงจากเครื่องท้องถิ่นของฉัน (2 keys 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.