ฉันจะเพิ่มคีย์ SSH ไปยังไฟล์ authorized_keys ได้อย่างไร


185

ฉันมีเซิร์ฟเวอร์อูบุนตูใน Amazon EC2 ที่ฉันใช้เพื่อการพัฒนาและในวันนี้ฉันลบ~/.ssh/authorized_keysไฟล์ออกจากไฟล์ของฉันอย่างน่างงงวย โชคดีที่ฉันเปิด SSH ดังนั้นฉันจึงยังคงเชื่อมต่อและสามารถแก้ไขไฟล์ได้ แต่เมื่อฉันพยายามนำไฟล์กุญแจกลับมามันไม่ทำงาน ฉันยังคงได้รับอนุญาตถูกปฏิเสธจากเซิร์ฟเวอร์ในเครื่องของฉัน

authorized_keysมีสิทธิ์ 600 ฉันได้ลองต่อท้ายคีย์ SSH ของฉันกับ ssh-rsa และออกจาก ssh-rsa ฉันยังพยายามสร้างคีย์ SSH ทั้งหมดหนึ่งบรรทัด แต่ก็ไม่ได้ผลเช่นกัน

มีอย่างอื่นที่ฉันต้องทำเช่นโหลดไฟล์ใหม่ได้อย่างไร?


3
หลายปีต่อมาสิ่งนี้ยังคงมีความเกี่ยวข้องและใช้งานอยู่ ต้องการเพียงแค่การสังเกตพูดคุยเกี่ยวกับการได้หลบกระสุน: "โชคดีที่ฉันมี SSH เปิดดังนั้นฉันจึงยังคงเชื่อมต่อ [.. ]" - Sheesh! ; dP
Nostromov

1
โพสต์นี้ซึ่งถูกแก้ไขในวันเกิดของฉันช่วยฉันสองเดือนก่อนในวันเกิดของฉัน
ytpillai

คำตอบ:


198

คุณไม่ควรบันทึกไฟล์ด้วยเนื้อหาที่ขึ้นต้นด้วย-----BEGIN RSA PRIVATE KEY-----บนเซิร์ฟเวอร์นั่นคือกุญแจส่วนตัวของคุณ คุณต้องใส่กุญแจสาธารณะลงใน~/.ssh/authorized_keysไฟล์แทน

นี้ประชาชนที่สำคัญมี.pubส่วนขยายเมื่อสร้างขึ้นโดยใช้และเนื้อหาของมันเริ่มต้นด้วยssh-keygen ssh-rsa AAAAB3(รูปแบบไบนารีอธิบายไว้ในคำตอบของคำถามนี้ )

สิทธิ์ของ~/.sshบนเซิร์ฟเวอร์ควรเป็น 700 ไฟล์~/.ssh/authorized_keys(บนเซิร์ฟเวอร์) ควรมีโหมด 600 สิทธิ์ของคีย์ (ส่วนตัว) บนฝั่งไคลเอ็นต์ควรเป็น 600

หากรหัสส่วนตัวไม่ได้รับการป้องกันด้วยรหัสผ่านและคุณวางไว้บนเซิร์ฟเวอร์ฉันขอแนะนำให้คุณสร้างรหัสใหม่:

ssh-keygen -t rsa

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

หากวิธีนี้ไม่ได้ผลให้ใช้sshตัวเลือกเพื่อรับรายละเอียดเพิ่มเติม:

ssh -vvv user@example.com

ทางฝั่งเซิร์ฟเวอร์คุณสามารถตรวจสอบ/var/log/auth.logรายละเอียดได้


1
ด้วยเซิร์ฟเวอร์ Amazon EC2 สิ่งที่ฉันได้รับคือกุญแจส่วนตัว (key.pem) ฉันไม่มีกุญแจสาธารณะเลย
Dave Long

3
@Dave Long: คุณต้องสร้างคีย์ใหม่โดยใช้ssh-keygen -t rsaและวางid_rsa.pubไฟล์ที่สร้างขึ้นใหม่ใน~/.ssh/authorized_keysเซิร์ฟเวอร์ของคุณ ดูเพิ่มเติมได้ที่docs.amazonwebservices.com/AWSEC2/latest/UserGuide/…
Lekensteyn

15
@DaveLong: คุณสามารถสร้างพับลิกคีย์จากไพรเวตคีย์ได้ตลอดเวลา คุณสามารถทำได้โดยใช้คำสั่งต่อไปนี้: ssh-keygen -y -f key.pem > key.pub
Morgan Blackthorne

5
@MorganBlackthorne ในขณะที่เป็นจริงฉันขอแนะนำให้สร้างคีย์ส่วนตัวของคุณมากกว่าที่จะยอมรับหนึ่งจากแหล่งที่ห่างไกล คุณไม่สามารถมั่นใจได้อย่างเต็มที่ว่าคีย์ส่วนตัวไม่รั่วไหลออกไป
Lekensteyn

2
@Gerrat Fixed²
Lekensteyn

175

อีกทางเลือกหนึ่งในการติดตั้งกุญแจสาธารณะของคุณในเครื่องระยะไกลauthorized_keys:

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

ข้อดีบางประการ:

  • ไม่จำเป็นต้องssh-copy-idติดตั้ง

  • รับประกันว่าmkdirการทำงานก่อนที่จะพยายามที่จะผนวกการid_rsa.pub authorized_keys


10
คำตอบของคุณช่วยให้ฉันทำสิ่งนี้กับเครื่องระยะไกลหลายเครื่องโดยไม่ต้องมีแพ็คเกจเพิ่มเติมขอบคุณ
nol

สิ่งนี้ไม่รับประกันว่าไดเรกทอรี "~ / .ssh" และ "~ / .ssh / authorized_keys" จะถูกสร้างขึ้นด้วยสิทธิ์ที่ถูกต้อง
Nick

1
@Nick ฉันมีปัญหานั้น ดังนั้นบางทีเราต้องตรวจสอบการมีอยู่ของพวกเขาก่อนหากไม่มีสร้างอย่างถูกต้องด้วย chmod (700 / โฟลเดอร์, 600 / ไฟล์) แล้วเพิ่มเท่านั้น? ถ้างั้นบางทีมันอาจจะเป็นซับอันเดียวไม่ได้เหรอ?
AnneTheAgile

7
@AnneTheAgile ฉันคิดว่าการเปลี่ยนmkdir -p ~/.sshส่วนของคำตอบที่ @MariusButuc ให้umask 077 && mkdir -p ~/.sshเป็นสิ่งที่คุณต้องทำเพื่อให้แน่ใจว่ามันจะทำงานได้อย่างถูกต้อง
Nick

1
ty @Nick! ฉันจะปล่อยมันไป
AnneTheAgile

128

หากคุณมีการตรวจสอบตามการเข้าสู่ระบบแล้วใช้ssh-copy-idเพื่อผนวกกุญแจสาธารณะของคุณไปยังเซิร์ฟเวอร์ระยะไกล

ssh-copy-id user@host

1
ดูเหมือนจะไม่เป็นคำสั่งที่ถูกต้องบน Mac ซึ่งเป็นสิ่งที่เครื่องไคลเอนต์ของฉันเป็น
Dave Long

1
อาจเป็นประโยชน์phildawson.tumblr.com/post/484798267/ssh-copy-id-in-mac-os-x
Shoaib Nawaz

13
บน OSX คุณสามารถติดตั้งกับชง:brew install ssh-copy-id
phil

เมื่อวันที่ Macports sudo port install openssh +ssh_copy_idคำสั่งนี้สามารถติดตั้งได้โดยใช้ การ+ssh_copy_idติดตั้ง openssh ด้วยตัวแปร ssh_copy_id
Stefan Lasiewski

6
โปรดทราบว่าคำแนะนำใน phildawson.tumblr.com ขอให้คุณติดตั้งซอฟต์แวร์ที่ไม่น่าเชื่อถือเช่นเดียวกับรูท วิธีนี้ค่อนข้างอันตรายและเป็นวิธีที่ดีในการแฮ็กข้อมูลเว้นแต่คุณจะรู้ว่าคุณสามารถเชื่อถือผู้เขียนได้
Stefan Lasiewski

38
local> scp .ssh/id_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit

16

วิธีที่ง่ายที่สุดคือการคัดลอกและวาง ...

ขั้นแรกให้ดู / คัดลอกเนื้อหาของกุญแจสาธารณะในพื้นที่ของคุณid_rsa.pubรวมถึงจุดเริ่มต้น "ssh-rsa" จนกว่าจะจบลงด้วยที่อยู่อีเมลของคุณ:

cat ~/.ssh/id_rsa.pub

จากนั้นแก้ไขauthorized_keysบนเซิร์ฟเวอร์และวางเนื้อหาของคลิปบอร์ดของคุณด้านล่างคีย์อื่น ๆ ในไฟล์นั้น:

nano ~/.ssh/authorized_keys

และบันทึกCtl+Oออกจากไฟล์Ctl+Xออกจากเซสชัน SSH exitแล้วลองลงชื่อเข้าใช้อีกครั้งเพื่อยืนยันว่าใช้งานได้ หากไม่ได้ขอรหัสผ่านจะใช้งานได้


5

ฉันคิดว่าฉันสามารถมีส่วนร่วมในเรื่องนี้ได้เนื่องจากเป็นเรื่องเกี่ยวกับอินสแตนซ์ของ AWS โดยเฉพาะและคำตอบทั้งหมดจะถือว่าปัญหาเป็นปัญหาของ Linux เท่านั้นราวกับว่ามันเป็นชิ้นส่วนของฮาร์ดแวร์ สิ่งแรกที่คุณต้องเข้าใจก็คือคุณไม่ควรปฏิบัติเช่นเดียวกับฮาร์ดแวร์ของ EC2 นั่นเป็นเพียงการสร้างผลงานมากขึ้นสำหรับคุณ นั่นเป็นอุปสรรค์ที่ยิ่งใหญ่ที่สุดที่ฉันเห็นผู้คนที่มีกับ AWS สร้าง AMI ของอินสแตนซ์ของคุณและฉีดกุญแจที่คุณต้องการลงในอินสแตนซ์ใหม่ cloud-init จะดูแลให้คุณ โดยละเอียดยิ่งขึ้นสิ่งที่คุณต้องทำคือใช้รหัสสาธารณะที่ถูกต้องเมื่อสร้างอินสแตนซ์ใหม่จาก AMI ของต้นฉบับ ถ้าเช่นเดียวกับในความคิดเห็นของคำตอบที่ได้รับการอนุมัติคุณต้องการสร้างคู่ของคุณเองของไฟล์ pub และ pem AWS ให้คุณมีตัวเลือกในการอัพโหลดกุญแจสาธารณะของคุณเพื่อใช้ใน EC2

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws


3

หลังจากบันทึกพับลิกคีย์คุณควรบันทึกไพรเวตคีย์ลงในไดเร็กทอรีและไฟล์บนพีซีของคุณ และในส่วน auth ของ ssh บน putty คุณควรชี้ไปที่ไฟล์กุญแจส่วนตัวที่คุณบันทึกไว้บนเดสก์ท็อปของคุณ มันจะทำงาน. มันใช้งานได้สำหรับฉัน


1
ฉันก็จะรักมันถ้าหน้าต่างคอนโซลจะมีฟังก์ชันการทำงานทั้งหมด SSH ที่เพิ่มเข้ามาก็ล่าม
เดนนิส

2

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

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys

1

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

ชุดรูปแบบนี้มีประโยชน์หากคุณให้รายการไฟล์กุญแจสาธารณะขนาดใหญ่เพื่อนำเข้า :-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.