ไม่สามารถ ssh แม้จะมีการเพิ่มรหัสสาธารณะใน authorized_keys


16

ฉันมีหยดมหาสมุทรดิจิตอลฉันพยายามให้ตัวเองเข้าถึง ฉันไม่แน่ใจว่าได้ทำอะไรไปก่อนหน้านี้ ฉันพยายามเพิ่มกุญแจสาธารณะของฉันผ่าน Digital Ocean UI permission denied (publickey)ที่ไม่ได้ทำงานผมเก็บรับ

/root/.ssh/authorized_keysฉันเข้าถึงเซิร์ฟเวอร์ผ่านคอนโซลมหาสมุทรดิจิตอลและเสริมคีย์สาธารณะของฉันไปด้วยตนเอง ssh root@x.x.x.xจากนั้นผมก็พยายามที่จะใช้ SSH ไม่ได้ผล (ปฏิเสธการอนุญาต)

ดังนั้นฉันลองเพิ่มผู้ใช้ใหม่สร้าง/home/me/.sshไดเรกทอรีที่มีสิทธิ์700ใน.sshไดเรกทอรีเองและ600ในauthorized_keysไฟล์ ssh me@x.x.x.xแล้วฉันพยายาม นั่นไม่ได้ผลเช่นกัน

การรีสตาร์ท ssh daemon จะไม่เปลี่ยนแปลงอะไรเลย

ฉันกำลังคิดถึงอะไร

แก้ไข:

นี่คือเอาต์พุต verbose ssh

https://gist.github.com/jaesung2061/a37cfd68308414cede8abf7f0137daa9

แก้ไข 2:

LogLevel DEBUG3 เอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่


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

@Jakuje ฉันได้เพิ่มเอาท์พุท ... ฉันไม่ได้สังเกตเห็นความคิดเห็นของคุณก่อน
Jeff

กุญแจถูกปฏิเสธ ตรวจสอบล็อกเซิร์ฟเวอร์สำหรับปัญหาที่เป็นไปได้ (อาจมีLogLevel DEBUG3ในsshd_config) ฉันสงสัยว่าสิ่งเหล่านี้เป็นปัญหาสิทธิ์ แต่อาจมีสาเหตุหลายประการ
Jakuje

มันบอกว่า[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
Jeff

สิทธิ์ของไฟล์ authorized_keys คืออะไร ls -ld ~ ~/.ssh ~/.ssh/authorized_keys? สำหรับ verbose เข้าสู่ระบบจากเซิร์ฟเวอร์แก้ไขไฟล์ดังกล่าวข้างต้น, บริการ SSH เริ่มต้นเชื่อมต่ออีกครั้งและโพสต์บันทึก (ควรจะยังอยู่ในauth.log.
Jakuje

คำตอบ:


20

การกำหนดค่าไคลเอนต์

ติดตั้ง ~/.ssh/config

การตั้งค่ารายการโฮสต์สำหรับsshเป็นเรื่องง่ายและจะช่วยให้คุณประหยัดมาก นี่คือตัวอย่าง:

Host digitaloceanbox
Hostname 111.111.111.111
User root
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/digitalocean-rsa
ForwardX11 yes


Host github github.com
Hostname github.com
User git
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/github-rsa
ForwardX11 no

ในตัวอย่างนี้เราติดตั้งdigitaloceanboxและgithubและgithub.comเพื่อให้เราสามารถทำคำสั่งต่อไปนี้:

  1. ssh github
  2. ssh digitaloceanbox

หากเราต้องการที่จะเข้าสู่ระบบในฐานะผู้ใช้ที่แตกต่างจากที่ระบุไว้ในไฟล์ config เราก็ใส่user@จุดเริ่มต้น:

  • ssh user@digitaloceanbox

สร้างsshกุญแจ

ssh-keygen -t rsa -b 4096 -C user@homemachine
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):  /home/user/.ssh/digitalocean-rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/digitalocean-rsa
Your public key has been saved in /home/user/.ssh/digitalocean-rsa.pub.
The key fingerprint is:
SHA256:p9PYE/tveF2n//bLbp3ogYDtMtYEC5ziQiPxeob6fbo user@homemachine

ssh-keygenโปรดทราบว่าฉันได้ระบุเส้นทางแบบเต็มของคีย์ส่วนตัวผมต้องการที่จะสร้างเมื่อได้รับแจ้งจาก ฉันยังได้กำหนดข้อคิดเห็น ( -C) ซึ่งทำให้ฉันสามารถระบุคีย์บนเครื่องระยะไกลได้อย่างง่ายดาย

สิ่งนี้จะสร้างสองไฟล์:

  1. .ssh/digitalocean-rsa
    • กุญแจ ส่วนตัว ไม่เคยแบ่งปัน
  2. .ssh/digitalocean-rsa.pub
    • กุญแจสาธารณะ นี่คือสิ่งที่คุณเก็บไว้บนเซิร์ฟเวอร์เพื่อตรวจสอบ

เมื่อคุณระบุsshรหัสให้แน่ใจว่าเป็น.pubรุ่น !! เมื่อคุณเพิ่มให้~/.ssh/configแน่ใจว่าได้เพิ่มกุญแจส่วนตัวที่ถูกต้องที่ตรงกับกุญแจสาธารณะที่คุณเพิ่มลงในระบบ


การกำหนดค่าเซิร์ฟเวอร์

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

ไม่แนะนำให้คุณใช้sshเพื่อเข้าถึงผู้ใช้รูทบนระบบรีโมต ขอแนะนำให้คุณsshเข้าสู่ผู้ใช้รายอื่นจากนั้นเลื่อนระดับไปที่รูทโดยใช้รหัสผ่านของคุณ ( sudo su -)

เพิ่มคีย์เพื่อโฮสต์โดยใช้ ssh-copy-id

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

  1. ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox

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

ปิดใช้งานการพิสูจน์ตัวตนด้วยรหัสผ่าน

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

  1. แก้ไข /etc/ssh/sshd_config
  2. PasswordAuthentication no
  3. sudo systemctl restart sshd

แล้วผู้ใช้ใหม่ล่ะ?

หากคุณปิดใช้งานการตรวจสอบรหัสผ่านคุณจะป้อนผู้ใช้ใหม่ได้อย่างไร วิธีหนึ่งคือการเพิ่มไฟล์แม่แบบไปยัง/etc/skelไดเรกทอรี เมื่อคุณป้อนผู้ใช้หนึ่งคนให้ทำดังนี้

  1. sudo cp -r .ssh/ /etc/skel/
  2. ls /etc/skel/.ssh
  3. แก้ไขไฟล์ใด ๆ ที่พบ/etc/skel/.ssh/เพื่อให้ไฟล์เหล่านั้นว่างเปล่าเว้นแต่คุณต้องการใส่รหัสโดยอัตโนมัติสำหรับผู้ใช้ที่สร้างใหม่ทุกคน

เมื่อคุณสร้างผู้ใช้ใหม่ด้วยsudo useradd -m newuserผู้ใช้นั้นจะมี.ssh/authorized_keysซึ่งคุณสามารถแก้ไขและจะมีสิทธิ์ที่เหมาะสม

แก้จุดบกพร่อง

คุณสามารถดูsshdล็อกไฟล์เพื่อดูว่าทำไมการเชื่อมต่อล้มเหลวหรือถูกปฏิเสธ:

  1. sudo tail -f /var/log/auth.log

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


1
ขั้นตอนการแก้ไขข้อบกพร่องทำงานได้สำหรับฉัน ไดเรกทอรีรากมีสิทธิ์ที่ไม่ถูกต้อง (จำเป็นต้องเป็น 700)
naisanza

12

Ssh ค่อนข้างพิถีพิถันเกี่ยวกับสิทธิ์ในการเป็นเจ้าของไฟล์และไดเรกทอรีด้วยปุ่ม ssh

~ / .ssh / ควรเป็นเจ้าของโดยเจ้าของและมีสิทธิ์ 700 รายการ ~ / .ssh / authorized_keys ควรเป็นของเจ้าของและมี 600 สิทธิ์

ดังนั้นสำหรับราก:

sudo chown root:root -R /root/.ssh/
sudo chmod 700 /root/.ssh/
sudo chmod 600 /root/.ssh/authorized_keys

สำหรับผู้ใช้ฉัน:

sudo chown me:me -R /home/me/
sudo chmod 700 /home/me/.ssh/
sudo chmod 600 /home/me/.ssh/authorized_keys

จากนั้นลองอีกครั้ง

แน่นอนคุณควรตรวจสอบใน / etc / ssh / sshd_config ว่ารูทได้รับอนุญาตให้ล็อกอินเลยหรือเพียงแค่ใช้คีย์ ssh

ถ้าคุณมี :

PasswordAuthentication no

จากนั้นคุณสามารถตั้งค่า:

PermitRootLogin yes

จากนั้นรีสตาร์ท sshd:

/etc/init.d/sshd restart

และลองอีกครั้ง

โปรดทราบว่าด้วย ssh sshd daemon สามารถเริ่มต้นใหม่ได้แม้ว่าจะใช้เซสชัน ssh สำหรับสิ่งนี้ Openens ได้รับการออกแบบมาเพื่อจัดการกับสิ่งนั้น

กำลังดูตัวอย่างไฟล์บันทึกการอัพโหลดของคุณดูเหมือนว่าคุณกำลังใช้ MacOSX ใช่ไหม คุณสามารถสร้างคีย์ ssh ใหม่ที่นั่นได้ไหม

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

Host my-vps
  HostName my-vps-ip-address-here
  IdentityFile ~/.ssh/id_rsa-my-private-key-location
  User my-username-here

หลังจากนั้นลองใช้บรรทัดคำสั่งบนเครื่องคอมพิวเตอร์ของคุณ:

ssh -v my-vps

เมื่อใช้คีย์ ssh รวมถึงไม่มีคีย์ ssh สำหรับการเข้าสู่ระบบอื่น ๆ คุณสามารถทำได้นอกเหนือจากรายการที่มีคีย์ ssh ยังกำหนดล็อกอิน ssh โดยไม่ต้องใช้คีย์ ssh ในไฟล์ ~ / ssh / config เช่น:

Host pi
  Hostname 192.168.1.111
  Port 22
  User pi
  PasswordAuthentication yes
  PreferredAuthentications password

มันใช้งานได้ดีสำหรับฉัน นอกจากนี้ยังเป็นไปได้ที่จะกำหนดว่าจะใช้คีย์ใดบนบรรทัดคำสั่ง:

ssh -v root@10.111.111.254 -i .ssh/id_rsa

สิ่งนี้อาจทำให้การดีบักง่ายขึ้นและในบรรทัดคำสั่งสิ่งนี้ควรทำงานบนเครื่องคอมพิวเตอร์


นอกจากวิธีนี้ฉันต้องเปลี่ยนการอนุญาตสำหรับโฟลเดอร์บ้านของฉันด้วยเพื่อให้ SSH ทำงานได้:sudo chmod 700 /home/me/
Rg90

คุณเป็นผู้ช่วยชีวิต @ albert-j! IdentityFileบรรทัดมีฉันออกมาจากร่องชั่วโมงนาน
zev

4

ตรวจสอบการกำหนดค่า ssh daemon อีกครั้ง (ควรอยู่ใน/etc/ssh/sshd_config) และตรวจสอบ:

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

ตรวจสอบไฟล์การกำหนดค่าเพื่อดูว่าได้ตั้งค่าAllowUsersหรือAllowGroupsไว้หรือไม่เนื่องจากพวกเขาทำหน้าที่เป็นรายการสีขาวสำหรับผู้ใช้และกลุ่มตามลำดับ

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


สิ่งเหล่านี้ไม่ทำงาน: / ฉันยังได้รับPermission denied (publickey)
Jeff

3

ตามบันทึกที่คุณเชื่อมโยงฉันคิดว่าคุณมีปัญหาในฝั่งไคลเอ็นต์ไม่พบไฟล์คีย์ส่วนตัว

  • ตรวจสอบไฟล์ก่อนว่า~/.ssh/id_rsaมีอยู่ในเครื่องของคุณและเป็นไฟล์ที่ถูกต้อง _ (ถ้าคุณมีมากกว่านี้)

  • ตรวจสอบ.sshสิทธิ์ของโฟลเดอร์(ควรจะเป็นdrwx------ถ้าไม่ทำงานsudo chmod 700 ~/.ssh)และเนื้อหา(ควรจะเป็น-rw-------ถ้าไม่ทำงานsudo chmod 600 ~/.ssh/* ) ใช้สิทธิ์เดียวกันสำหรับเครื่องระยะไกลด้วย

นอกจากนี้คุณสามารถลองบังคับใช้คีย์ส่วนตัวที่คุณต้องการกำหนดให้sshกับ-iพารามิเตอร์โดยตรง

  • คุณสามารถเรียกใช้สิ่งต่อไปนี้:

    ssh -i /path/to/your/private-key root@X.X.X.X

    หรือ

    ssh -i ~/.ssh/id_rsa myRemoteUser@X.X.X.X

คุณจะได้รับข้อมูลเพิ่มเติมเกี่ยวกับ SSH manpage (ทำงานman sshใน terminal ของคุณ)

นอกจากนี้ยังเก็บไว้ในใจถ้าคุณต้องการที่จะเข้าสู่ระบบในฐานะrootผู้ใช้บัญชีรากของคุณจะต้องมีการเปิดใช้งานก่อนที่จะเข้าสู่ระบบการสร้าง passwd สำหรับมันด้วยsudo passwd rootหรือเครื่องมือการบริหารจัดการเซิร์ฟเวอร์ของคุณ(Ubutntu มีบัญชี root ปิดใช้งานโดยค่าเริ่มต้น) คุณจะได้รับข้อมูลเพิ่มเติมได้ที่อูบุนตูวิกิพีเดีย

หวังว่ามันจะช่วย


3

ฉันสิ้นสุดการติดตั้งใหม่ openssh-serverซึ่งแก้ไขปัญหาได้ โซลูชั่นที่ให้มานั้นยอดเยี่ยมมาก แต่มันไม่ได้ผลสำหรับฉัน ฉันไม่รู้ว่าอะไรเป็นสาเหตุของปัญหา แต่ฉันคิดว่าผู้พัฒนาคนก่อนหน้าอาจยุ่งกับการกำหนดค่าและทำให้สิ่งต่าง ๆ แย่ลง

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

apt-get purge openssh-server
apt-get autoremove
apt-get autoclean
apt-get install openssh-server

สมมติว่าลูกค้า / คีย์ ssh ของคุณอยู่ในลำดับที่คุณควรจะสามารถ SSH ลงในเซิร์ฟเวอร์ของคุณ


1

ปัญหานี้เกิดขึ้นกับฉันโดยใช้ภาพ Debian บน Digital Ocean อย่างใดในช่วงสั้น ๆ ที่กำหนดไว้ในขั้นตอนอาจจะเมื่อฉันตั้งค่ารหัสผ่านรากเจ้าของถูกเปลี่ยนให้กับผู้ใช้/root debianฉันเห็นสิ่งต่อไปนี้ใน/var/log/auth.log:

Jul 26 20:58:17 docker sshd[12576]: Authentication refused: bad ownership or modes for directory /root

เพียงดำเนินการchown root:root -R /rootแก้ไขปัญหา

HTH


0

เพิ่งมีปัญหาที่คล้ายกันมาก สิ่งนี้ใช้ได้ผลสำหรับฉัน - เพิ่มบรรทัดนี้ไปยัง/ etc / ssh / sshd_config

AuthorizedKeysFile %h/.ssh/authorized_keys 

จากนั้นรีสตาร์ท ssh ตามปกติ

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