คำเตือน: ไฟล์ลับส่วนตัวที่ไม่มีการป้องกัน! เมื่อพยายามที่จะ SSH เข้าสู่ Amazon EC2 อินสแตนซ์


190

ฉันกำลังทำงานเพื่อตั้งค่าแพนด้าบนอินสแตนซ์ Amazon EC2 ฉันตั้งค่าบัญชีและเครื่องมือของฉันเมื่อคืนและไม่มีปัญหาในการใช้ SSH เพื่อโต้ตอบกับอินสแตนซ์ส่วนตัวของฉันเอง แต่ตอนนี้ฉันไม่ได้รับอนุญาตให้ใช้อินสแตนซ์ EC2 ของแพนด้า เริ่มต้นกับ Panda

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

@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @

Permissions 0644 for '~/.ec2/id_rsa-gsg-keypair' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

ฉันได้ chmoded keypair ของฉันไปที่ 600 เพื่อที่จะเข้าสู่อินสแตนซ์ส่วนตัวของฉันเมื่อคืนและทดลองที่ความยาวตั้งค่าการอนุญาตเป็น 0 และแม้กระทั่งการสร้างสตริงคีย์ใหม่ แต่ดูเหมือนจะไม่มีอะไรทำงาน

ความช่วยเหลือใด ๆ ที่จะเป็นความช่วยเหลือที่ดี!


หืมดูเหมือนว่าจะมีการตั้งค่าการอนุญาตเป็น 777 ในไดเรกทอรีสคริปต์ ec2-run-instance ไม่สามารถหาคีย์ไฟล์ของฉันได้ ฉันใหม่กับ SSH ดังนั้นฉันอาจมองเห็นบางสิ่งบางอย่าง


ec2-run-instance ควรต้องการชื่อ keypair เท่านั้นซึ่งเป็นสิ่งที่อยู่ด้านข้างของ Amazon คุณควรใช้ไพรเวตคีย์จริงของคุณ (หนึ่งตัวบนดิสก์) เมื่อคุณ SSH ค่ะคุณได้รับข้อผิดพลาดอะไรจาก ec2-run-instance?
user27619

3
ชื่อแย่มากสำหรับคำถามนี้
MikeNereson

2
@MikeNereson: รู้สึกอิสระที่จะแก้ไขมันว่าเป็นวิธีการที่เราทำในสิ่งที่ดีกว่ารอบที่นี่
สตู ธ อมป์สัน

คุณแน่ใจหรือว่าคุณตั้งไว้ที่ 0600 (ฐานแปด) และไม่ใช่ 600 (ทศนิยม)
ไฮด์

5
chmod 400 ~/.ssh/id_rsa อ้างอิง: stackoverflow.com/a/9270753/2082569
atulkhatri

คำตอบ:


210

ฉันได้ chmoded keypair ของฉันถึง 600 เพื่อที่จะเข้าสู่อินสแตนซ์ส่วนตัวของฉันเมื่อคืน

และนี่คือวิธีที่ควรจะเป็น

จากเอกสาร EC2เรามี"หากคุณใช้ OpenSSH (หรือไคลเอ็นต์ SSH หวาดระแวงอย่างสมเหตุสมผล) จากนั้นคุณอาจต้องตั้งค่าการอนุญาตของไฟล์นี้เพื่อให้คุณอ่านได้เท่านั้น" เอกสารแพนด้าที่คุณเชื่อมโยงไปยังลิงก์ไปยังเอกสารของ Amazon แต่ไม่ได้บอกว่ามันสำคัญแค่ไหน

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

การตั้งค่าไดเรกทอรีเป็น 700 น่าจะเพียงพอ แต่ 777 จะไม่เจ็บตราบใดที่ไฟล์นั้นมี 600

ปัญหาใด ๆ ที่คุณมีคือด้านลูกค้าดังนั้นโปรดรวมข้อมูลระบบปฏิบัติการท้องถิ่นไว้ด้วยคำถามติดตามใด ๆ !


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

@tobixen: สองปีที่ผ่านมา แต่ ... วิธีแก้ปัญหา 'ถูกต้อง' คือการวางกุญแจในผู้ใช้เฉพาะและอนุญาตให้ผู้ใช้กลุ่ม sudo เข้าถึงการเรียกใช้คำสั่งนั้นเป็นผู้ใช้เฉพาะ
Stu Thompson

@StuThompson ลิงก์ไปยังเอกสาร EC2 ดูเหมือนว่าจะตาย คุณช่วยอัพเดทได้ไหม
Aniket Thakur

ฉันไม่เห็นว่าฉันจะทำอย่างไรเพื่อให้มันทำงานได้ในคำตอบของคุณโปรดให้คำตอบ :)
Pratik

@Pratik การตั้งค่า 600 สำหรับไฟล์คีย์และ 777 สำหรับไดเรกทอรีควรใช้งานได้
Jamo

55

ตรวจสอบให้แน่ใจว่าไดเรกทอรีที่มีไฟล์กุญแจส่วนตัวถูกตั้งค่าเป็น700

chmod 700 ~/.ec2

เหตุผลพิเศษใด ๆ ที่คุณต้องการมีสิทธิ์ดำเนินการในไฟล์?
Zoltán

1
@ Zoltánเป็นไดเรกทอรีไม่ใช่ไฟล์
avmohan

ฉันเพิ่งใช้มันในไฟล์. pem และมันก็ใช้ได้กับฉัน
CGTheLegend

30

ในการแก้ไขปัญหานี้ 1) คุณจะต้องรีเซ็ตสิทธิ์กลับเป็นค่าเริ่มต้น:

sudo chmod 600 ~/.ssh/id_rsa sudo chmod 600 ~/.ssh/id_rsa.pub

หากคุณได้รับข้อผิดพลาดอื่น: คุณแน่ใจหรือไม่ว่าต้องการเชื่อมต่อ (ใช่ / ไม่ใช่)? ใช่ล้มเหลวในการเพิ่มโฮสต์ลงในรายการโฮสต์ที่รู้จัก (/home/geek/.ssh/known_hosts)

2) ซึ่งหมายความว่าการอนุญาตในไฟล์นั้นถูกตั้งค่าอย่างไม่ถูกต้องและสามารถปรับได้ด้วยวิธีนี้:

sudo chmod 644 ~/.ssh/known_hosts

3) ในที่สุดคุณอาจต้องปรับเปลี่ยนการอนุญาตไดเรกทอรีเช่นกัน:

sudo chmod 755 ~/.ssh

สิ่งนี้จะทำให้คุณกลับมาทำงานได้อีกครั้ง


17

ไฟล์คีย์ส่วนตัวควรได้รับการปกป้อง ในกรณีของฉันฉันใช้การพิสูจน์ตัวตนแบบสาธารณะเป็นเวลานานและฉันใช้เพื่อตั้งค่าการอนุญาตเป็น 600 (rw- --- ---) สำหรับคีย์ส่วนตัวและ 644 (rw- r-- r--) และสำหรับ โฟลเดอร์. ssh ในโฮมโฟลเดอร์คุณจะได้รับอนุญาต 700 (rwx --- ---) สำหรับการตั้งค่าให้ไปที่โฟลเดอร์โฮมของผู้ใช้และเรียกใช้คำสั่งต่อไปนี้


ตั้งค่าสิทธิ์700สำหรับโฟลเดอร์. ssh

chmod 700 .ssh


ตั้งค่าการอนุญาต600สำหรับไฟล์กุญแจส่วนตัว

chmod 600 .ssh/id_rsa


ตั้งค่าการอนุญาต644สำหรับไฟล์กุญแจสาธารณะ

chmod 644 .ssh/id_rsa.pub


2

เก็บคีย์ส่วนตัว, กุญแจสาธารณะ, known_hosts ในไดเรกทอรีเดียวกันและลองลงชื่อเข้าใช้ด้านล่าง:

ssh -I(small i) "hi.pem" ec2-user@ec2-**-***-**-***.us-west-2.compute.amazonaws.com
  • ไดเรกทอรีเดียวกันในแง่, cd /Users/prince/Desktop. ตอนนี้พิมพ์lsคำสั่งแล้วคุณควรเห็น **.pem **.ppk known_hosts

หมายเหตุ:คุณต้องพยายามลงชื่อเข้าใช้จากไดเรกทอรีเดียวกันหรือคุณได้รับสิทธิ์การปฏิเสธข้อผิดพลาดเนื่องจากไม่สามารถหาไฟล์. pem จากไดเรกทอรีปัจจุบันของคุณ


หากคุณต้องการที่จะสามารถ SSH จากไดเรกทอรีใด ๆ คุณสามารถเพิ่มไฟล์ต่อไปนี้ให้คุณ~/.ssh/config...

Host your.server
HostName ec2-user@ec2-**-***-**-***.us-west-2.compute.amazonaws.com
User ec2-user
IdentityFile ~/.ec2/id_rsa-gsg-keypair
IdentitiesOnly yes

ตอนนี้คุณสามารถ SSH ไปยังเซิร์ฟเวอร์ของคุณไม่ว่าไดเรกทอรีจะอยู่ที่ใดโดยพิมพ์ssh your.server(หรือชื่ออะไรก็ตามที่คุณวางไว้หลังจาก "โฮสต์")


1

บน windows ลองใช้ git bash และใช้คำสั่ง Linux ของคุณที่นั่น วิธีการง่าย ๆ

chmod 400 *****.pem

ssh -i "******.pem" ubuntu@ec2-11-111-111-111.us-east-2.compute.amazonaws.com

หากใช้ WSL ตรวจสอบให้แน่ใจว่าคุณคัดลอกไฟล์ pem ไปยังโฟลเดอร์ Linux เนื่องจาก chmod จะไม่มีประสิทธิภาพใน / mnt dirs
Paulo Merson


0

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

ดังนั้นฉันคิดว่าคุณอาจลองใช้ ssh กับผู้ใช้ ec2 แต่ฉันจำได้ว่าเมื่อเร็ว ๆ นี้ส่วนใหญ่ของ CentOS AMIs เช่นกำลังใช้ผู้ใช้ centos แทนผู้ใช้ ec2

ดังนั้นหากคุณเป็นคน ssh -i file.pem centos@public_IPโปรดบอกฉันว่าคุณกำลังลองใช้ ssh ด้วยชื่อผู้ใช้ที่ถูกต้องมิฉะนั้นนี่อาจเป็นเหตุผลที่ดีที่คุณจะเห็นข้อความแสดงข้อผิดพลาดดังกล่าวแม้จะมีสิทธิ์ที่ถูกต้องใน ~ / .ssh / id_rsa หรือ file.pem


0

เพียงบันทึกสำหรับทุกคนที่สะดุดเมื่อนี้:

หากคุณกำลังพยายาม SSH ด้วยรหัสที่แบ่งปันให้กับคุณตัวอย่างเช่น:

ssh -i /path/to/keyfile.pem user@some-host

ที่ไหนkeyfile.pemเป็นส่วนตัว / คีย์สาธารณะที่ใช้ร่วมกันกับคุณและคุณใช้มันในการเชื่อมต่อให้แน่ใจว่าคุณบันทึกมันลงไปและ~/.ssh/chmod 777

พยายามที่จะใช้ไฟล์เมื่อมันถูกบันทึกไว้ที่อื่นในเครื่องของฉันได้ให้ข้อผิดพลาดของ OP ไม่แน่ใจว่าเกี่ยวข้องโดยตรงหรือไม่


0

วิธีแก้ปัญหาคือให้เจ้าของไฟล์อ่านได้เท่านั้นนั่นคือตัวเลขสองหลักสุดท้ายของการแทนค่าโหมดฐานแปดควรเป็นศูนย์ (เช่นโหมด0400)

OpenSSH ตรวจสอบสิ่งนี้ในauthfile.cในชื่อฟังก์ชั่นsshkey_perm_ok:

/*
 * if a key owned by the user is accessed, then we check the
 * permissions of the file. if the key owned by a different user,
 * then we don't care.
 */
if ((st.st_uid == getuid()) && (st.st_mode & 077) != 0) {
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @");
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("Permissions 0%3.3o for '%s' are too open.",
        (u_int)st.st_mode & 0777, filename);
    error("It is required that your private key files are NOT accessible by others.");
    error("This private key will be ignored.");
    return SSH_ERR_KEY_BAD_PERMISSIONS;
}

ดูบรรทัดแรกหลังจากความคิดเห็น: มันเป็น "bitwise และ" เทียบกับโหมดของไฟล์เลือกบิตทั้งหมดในสองแปดหลักสุดท้าย (เนื่องจาก07เป็นเลขฐานแปดสำหรับ0b111ที่แต่ละบิตหมายถึง r / w / x ตามลำดับ) .

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