เพิ่ม Keypair ให้กับอินสแตนซ์ EC2 ที่มีอยู่


240

ฉันได้รับสิทธิ์เข้าถึง AWS Console สำหรับบัญชีที่มี 2 อินสแตนซ์ที่ทำงานซึ่งฉันไม่สามารถปิดได้ (ในการผลิต) อย่างไรก็ตามฉันต้องการได้รับการเข้าถึง SSH กับอินสแตนซ์เหล่านี้เป็นไปได้หรือไม่ที่จะสร้าง Keypair ใหม่และนำไปใช้กับอินสแตนซ์ดังนั้นฉันจึงสามารถ SSH ได้หรือไม่ การรับไฟล์ pis ที่มีอยู่สำหรับ keypair นั้นอินสแตนซ์ที่สร้างภายใต้ยังไม่ได้เป็นตัวเลือก

หากเป็นไปไม่ได้มีวิธีอื่นที่ฉันสามารถเข้าไปในอินสแตนซ์ได้หรือไม่


คุณลองวิธีแก้ปัญหาที่นี่แล้ว: stackoverflow.com/questions/1454629/… ? ssh-addควรทำสิ่งที่คุณต้องการ
Marc Bollinger

ยินดีที่ได้เรียนรู้คุณสมบัติ ssh-add แต่สิ่งนี้จะไม่ช่วยเพราะผู้ใช้รายนี้สร้างอินสแตนซ์โดยใช้ keypair ที่เขาสร้างขึ้น อินสแตนซ์ที่ฉันกำลังอ้างถึงถูกสร้างขึ้นด้วยรหัสคู่อื่นที่ฉันไม่สามารถเข้าถึงได้
Chris Wagner

1
อาจจะคุณควรถามคำถามนี้ในserverfault.com
Claude Vedovini

4
คุณไม่สามารถใช้คู่คีย์กับอินสแตนซ์ที่กำลังทำงานอยู่ได้
Rodney Quillo

คำตอบ:


172

คุณไม่สามารถใช้คู่คีย์กับอินสแตนซ์ที่กำลังทำงานอยู่ได้ คุณสามารถใช้คีย์แพร์ใหม่เพื่อเปิดอินสแตนซ์ใหม่เท่านั้น

สำหรับการกู้คืนหากเป็น EBS boot AMI คุณสามารถหยุดสร้าง snapshot ของวอลลุ่มได้ สร้างโวลุ่มใหม่ตาม และสามารถใช้งานได้เพื่อเริ่มต้นอินสแตนซ์เก่าสร้างภาพใหม่หรือกู้คืนข้อมูล

แม้ว่าข้อมูลที่เก็บชั่วคราวจะสูญหาย


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

เครดิตไปที่Eric Hammondสำหรับข้อมูลนี้

การแก้ไขไฟล์ในปริมาณ EBS รูทของอินสแตนซ์ EC2

คุณสามารถตรวจสอบและแก้ไขไฟล์ในปริมาณ EBS รูทบนอินสแตนซ์ EC2 แม้ว่าคุณจะอยู่ในสถานการณ์ที่น่ารังเกียจเช่น:

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

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

อย่างไรก็ตามอินสแตนซ์ EC2 ระยะไกลดูเหมือนว่าอยู่ไกลและไม่สามารถเข้าถึงได้เมื่อคุณอยู่ในสถานการณ์เหล่านี้ โชคดีที่ AWS ให้พลังและความยืดหยุ่นแก่เราในการกู้คืนระบบเช่นนี้โดยมีเงื่อนไขว่าเรากำลังใช้งาน EBS สำหรับการบู๊ตอินสแตนซ์

วิธีการใน EC2 นั้นค่อนข้างคล้ายกับโซลูชันทางกายภาพ แต่เรากำลังจะย้ายและติดตั้ง "ฮาร์ดไดรฟ์" ที่ผิดปกติ (โวลุ่ม EBS ระดับราก) ไปยังอินสแตนซ์อื่นแก้ไขจากนั้นย้ายกลับมา

ในบางสถานการณ์อาจเป็นการง่ายกว่าที่จะเริ่มต้นอินสแตนซ์ EC2 ใหม่และทิ้งสิ่งที่ไม่ดี แต่ถ้าคุณต้องการแก้ไขไฟล์ของคุณจริงๆนี่เป็นวิธีที่ใช้ได้ผลกับหลาย ๆ คน:

ติดตั้ง

ระบุอินสแตนซ์ดั้งเดิม (A) และโวลุ่มที่มีโวลุ่ม EBS รูทที่แตกหักพร้อมไฟล์ที่คุณต้องการดูและแก้ไข

instance_a=i-XXXXXXXX

volume=$(ec2-describe-instances $instance_a |
  egrep '^BLOCKDEVICE./dev/sda1' | cut -f3)

ระบุอินสแตนซ์ EC2 ที่สอง (B) ที่คุณจะใช้เพื่อแก้ไขไฟล์ในโวลุ่ม EBS ดั้งเดิม อินสแตนซ์นี้จะต้องทำงานในโซนความพร้อมใช้งานเดียวกันกับอินสแตนซ์ A เพื่อให้สามารถเชื่อมต่อกับไดรฟ์ข้อมูล EBS ได้ หากคุณยังไม่มีอินสแตนซ์ที่ทำงานอยู่ให้เริ่มการทำงานชั่วคราว

instance_b=i-YYYYYYYY

หยุดการทำงานของอินสแตนซ์ที่ใช้งานไม่ได้ A (รอให้การหยุดทำงานเสร็จสมบูรณ์) ถอดโวลุ่ม EBS หลักออกจากอินสแตนซ์ (รอให้ถอดออก) จากนั้นแนบโวลุ่มไปที่อินสแตนซ์ B บนอุปกรณ์ที่ไม่ได้ใช้

ec2-stop-instances $instance_a
ec2-detach-volume $volume
ec2-attach-volume --instance $instance_b --device /dev/sdj $volume

ssh กับอินสแตนซ์ B และเมานต์โวลุ่มเพื่อให้คุณสามารถเข้าถึงระบบไฟล์ได้

ssh ...instance b...

sudo mkdir -p 000 /vol-a
sudo mount /dev/sdj /vol-a

ซ่อมมัน

ณ จุดนี้ระบบไฟล์รูททั้งหมดของคุณจากอินสแตนซ์ A พร้อมใช้งานสำหรับการดูและแก้ไขภายใต้ / vol-a บนอินสแตนซ์ B ตัวอย่างเช่นคุณอาจต้องการ:

  • วางคีย์ ssh ที่ถูกต้องใน /vol-a/home/ubuntu/.ssh/authorized_keys
  • แก้ไขและแก้ไข / vol-a / etc / sudoers
  • ค้นหาข้อความแสดงข้อผิดพลาดใน / vol-a / var / log / syslog
  • คัดลอกไฟล์สำคัญออกจาก / vol-a / ...

หมายเหตุ: uids ของทั้งสองอินสแตนซ์อาจไม่เหมือนกันดังนั้นโปรดระวังหากคุณกำลังสร้างแก้ไขหรือคัดลอกไฟล์ที่เป็นของผู้ใช้ที่ไม่ใช่รูท ตัวอย่างเช่นผู้ใช้ mysql ของคุณบนอินสแตนซ์ A อาจมี UID เหมือนกับผู้ใช้ postfix ของคุณบนอินสแตนซ์ B ซึ่งอาจทำให้เกิดปัญหาหากคุณ chown ไฟล์ด้วยชื่อเดียวแล้วย้ายระดับเสียงกลับไปที่ A

สรุป

หลังจากเสร็จสิ้นและคุณพอใจกับไฟล์ภายใต้ / vol-a แล้วให้ unmount ระบบไฟล์ (ยังอยู่ใน instance-B):

sudo umount /vol-a
sudo rmdir /vol-a

ตอนนี้กลับมาที่ระบบของคุณด้วย ec2-api-tools แล้วย้ายวอลุ่ม EBS กลับไปที่เดิมบนอินสแตนซ์ดั้งเดิม A และเริ่มต้นอินสแตนซ์อีกครั้ง:

ec2-detach-volume $volume
ec2-attach-volume --instance $instance_a --device /dev/sda1 $volume
ec2-start-instances $instance_a

หวังว่าคุณจะแก้ไขปัญหาอินสแตนซ์ A เกิดขึ้นได้ดีและคุณสามารถทำสิ่งที่คุณตั้งใจไว้ให้สำเร็จได้ หากไม่เป็นเช่นนั้นคุณอาจต้องทำขั้นตอนเหล่านี้ซ้ำจนกว่าคุณจะใช้งานได้

หมายเหตุ: หากคุณมีที่อยู่ IP แบบยืดหยุ่นให้กับอินสแตนซ์ A เมื่อคุณหยุดมันคุณจะต้องเชื่อมโยงใหม่อีกครั้งหลังจากเริ่มต้นขึ้นอีกครั้ง

จำไว้! หากอินสแตนซ์ B ของคุณเริ่มต้นชั่วคราวสำหรับกระบวนการนี้อย่าลืมยกเลิกตอนนี้


คุณช่วยบอกเราทีละขั้นตอนสำหรับเรื่องนี้ (หรือชี้ไปที่มัน) ในกรณีของฉันฉันมีอินสแตนซ์ที่ใช้งานอยู่และจำเป็นต้องลงชื่อเข้าใช้จากที่ตั้งระยะไกลซึ่งฉันไม่มีรหัสส่วนตัว
Jus12

87

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

ในกรณีของคุณคุณสามารถขอให้เจ้าของอินสแตนซ์ (ใครเป็นคนสร้าง) ทำสิ่งต่อไปนี้ ดังนั้นเจ้าของอินสแตนซ์ไม่จำเป็นต้องแชร์กุญแจของตัวเองกับคุณ แต่คุณจะยังสามารถใช้ SSH กับอินสแตนซ์เหล่านี้ได้ ขั้นตอนเหล่านี้ถูกโพสต์โดยเดิมที Utkarsh Sengar (aka. @zengr ) ที่http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/ ฉันได้ทำการเปลี่ยนแปลงเพียงเล็กน้อยเท่านั้น

  1. ขั้นตอนที่ 1: ล็อกอินโดยค่าเริ่มต้นผู้ใช้“ ubuntu” :

    $ ssh -i my_orig_key.pem ubuntu@111.111.11.111
    
  2. ขั้นตอนที่ 2: สร้างผู้ใช้ใหม่เราจะโทรหาผู้ใช้ใหม่ของเรา“ john” :

    [ubuntu@ip-11-111-111-111 ~]$ sudo adduser john
    

    ตั้งรหัสผ่านสำหรับ“ john” โดย:

    [ubuntu@ip-11-111-111-111 ~]$ sudo su -
    [root@ip-11-111-111-111 ubuntu]# passwd john
    

    เพิ่ม“ john” ในรายการของ sudoer โดย:

    [root@ip-11-111-111-111 ubuntu]# visudo
    

    .. และเพิ่มรายการต่อไปนี้ในตอนท้ายของไฟล์:

    john   ALL = (ALL)    ALL
    

    เอาล่ะ! เรามีผู้ใช้ใหม่ของเราสร้างขึ้นตอนนี้คุณต้องสร้างไฟล์คีย์ที่จะต้องเข้าสู่ระบบเช่นเรามี my_orin_key.pem ในขั้นตอนที่ 1

    ตอนนี้ออกและกลับไปที่ Ubuntu จากรูท

    [root@ip-11-111-111-111 ubuntu]# exit
    [ubuntu@ip-11-111-111-111 ~]$
    
  3. ขั้นตอนที่ 3: สร้างคีย์สาธารณะและส่วนตัว :

    [ubuntu@ip-11-111-111-111 ~]$ su john
    

    ป้อนรหัสผ่านที่คุณสร้างสำหรับ“ john” ในขั้นตอนที่ 2 จากนั้นสร้างคู่กุญแจ โปรดจำไว้ว่าวลีรหัสผ่านสำหรับคู่กุญแจควรมีอย่างน้อย 4 ตัวอักษร

    [john@ip-11-111-111-111 ubuntu]$ cd /home/john/
    [john@ip-11-111-111-111 ~]$ ssh-keygen -b 1024 -f john -t dsa
    [john@ip-11-111-111-111 ~]$ mkdir .ssh
    [john@ip-11-111-111-111 ~]$ chmod 700 .ssh
    [john@ip-11-111-111-111 ~]$ cat john.pub > .ssh/authorized_keys
    [john@ip-11-111-111-111 ~]$ chmod 600 .ssh/authorized_keys
    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh
    

    ในขั้นตอนข้างต้น john คือผู้ใช้ที่เราสร้างขึ้นและ ubuntu เป็นกลุ่มผู้ใช้เริ่มต้น

    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh/authorized_keys
    
  4. ขั้นตอนที่ 4: ตอนนี้คุณเพียงแค่ต้องดาวน์โหลดคีย์ที่เรียกว่า“จอห์น” ฉันใช้ scp เพื่อดาวน์โหลด / อัปโหลดไฟล์จาก EC2 นี่คือวิธีที่คุณทำได้

    คุณยังจะต้องคัดลอกไฟล์โดยใช้ผู้ใช้Ubuntuเนื่องจากคุณมีคีย์สำหรับชื่อผู้ใช้นั้นเท่านั้น ดังนั้นคุณจะต้องย้ายคีย์ไปยังโฟลเดอร์ ubuntu และ chmod เป็น 777

    [john@ip-11-111-111-111 ~]$ sudo cp john /home/ubuntu/
    [john@ip-11-111-111-111 ~]$ sudo chmod 777 /home/ubuntu/john
    

    ตอนนี้มาที่เทอร์มินัลของเครื่องที่คุณมีไฟล์ my_orig_key.pem และทำสิ่งนี้:

    $ cd ~/.ssh
    $ scp -i my_orig_key.pem ubuntu@111.111.11.111:/home/ubuntu/john john
    

    คำสั่งดังกล่าวจะคัดลอกคีย์ "john" ไปยังไดเรกทอรีการทำงานปัจจุบันบนเครื่องของคุณ เมื่อคุณคัดลอกคีย์ไปยังเครื่องท้องถิ่นของคุณคุณควรลบ“ / home / ubuntu / john” เนื่องจากเป็นรหัสส่วนตัว

    ตอนนี้หนึ่งเครื่องท้องถิ่นของคุณ chmod john ถึง 600

    $ chmod 600 john
    
  5. ขั้นตอนที่ 5: เวลาในการทดสอบคีย์ของคุณ :

    $ ssh -i john john@111.111.11.111
    

ด้วยวิธีนี้คุณสามารถตั้งค่าผู้ใช้หลายคนให้ใช้ EC2 หนึ่งอินสแตนซ์ได้ !!


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

มันใช้งานได้สำหรับฉัน แต่ฉันจะนำทางไปยังผู้ใช้ ubuntu ได้จากที่นี่เนื่องจากไฟล์ที่ฉันจะทำงานนั้นอยู่ในไดเรกทอรีผู้ใช้ ubuntu นี่จะพาฉันไปที่กลุ่มผู้ใช้ john Ubuntu 14.04.4 LTS
olyjosh

สิ่งนี้ไม่ได้ผลสำหรับฉัน มันให้สิทธิ์ที่ไม่ถูกต้อง ฉันต้องสร้างคู่กุญแจจากคอนโซล ec2 แล้วมันก็เริ่มทำงาน
อัศวินดำ

11

บนเครื่องโลคัลของคุณให้รันคำสั่ง:

ssh-keygen -t rsa -C "SomeAlias"

หลังจากคำสั่งนั้นรันไฟล์ที่ลงท้ายด้วย * .pub จะถูกสร้างขึ้น คัดลอกเนื้อหาของไฟล์นั้น

บนเครื่อง Amazon ให้แก้ไข ~ / .ssh / authorized_keys และวางเนื้อหาของไฟล์ * .pub (และลบเนื้อหาที่มีอยู่ก่อน)

จากนั้นคุณสามารถ SSH โดยใช้ไฟล์อื่นที่สร้างขึ้นจากคำสั่ง ssh-keygen (ไพรเวตคีย์)


เช่น @Dan พูดถึงมันเป็นไปได้ที่จะเปลี่ยนการเข้าถึงอินสแตนซ์ของคุณในการแก้ไขไฟล์นี้ แต่คุณจะไม่สามารถเปลี่ยน keypair ที่เกี่ยวข้องกับอินสแตนซ์ที่ระดับข้อมูลเมตา อย่าลืมเพิ่มชื่อไฟล์. pem ท้าย publicKey ของคุณเช่น:ssh-rsa AAAAB3NzaC1yc2EA...DsGt66 my-key-pair
Ricardo Mutti

7

สิ่งนี้เกิดขึ้นกับฉันก่อนหน้านี้ (ไม่สามารถเข้าถึงอินสแตนซ์ EC2 ที่คนอื่นสร้างขึ้น แต่มีการเข้าถึงเว็บคอนโซล AWS) และฉันบล็อกคำตอบ: http://readystate4.com/2013/04/09/aws-gaining- SSH การเข้าถึงการใช้บริการ EC2 อินสแตนซ์การเข้าถึงที่คุณหายไป /

โดยทั่วไปคุณสามารถแยกไดรฟ์ EBS เชื่อมต่อกับ EC2 ที่คุณสามารถเข้าถึงได้ เพิ่มรหัสผับ SSH ของคุณไปยัง~ec2-user/.ssh/authorized_keysไดรฟ์ที่แนบมานี้ จากนั้นนำกลับมาใช้กับอินสแตนซ์ EC2 เก่า ทีละขั้นตอนในลิงค์โดยใช้ Amazon AMI

ไม่จำเป็นต้องสร้างสแนปชอตหรือสร้างอินสแตนซ์ที่โคลนใหม่


6

ในกรณีของฉันฉันใช้เอกสารนี้เพื่อเชื่อมโยงคู่กุญแจกับอินสแตนซ์ของ Elastic Beanstalk ของฉัน

สำคัญ

คุณต้องสร้างคู่คีย์ Amazon EC2 และกำหนดค่าอินสแตนซ์ Elastic Beanstalk – provisioned Amazon EC2 ของคุณเพื่อใช้คู่คีย์ Amazon EC2 ก่อนที่คุณจะสามารถเข้าถึงอินสแตนซ์ Elastic Beanstalk– สำรองของ Amazon EC2 คุณสามารถตั้งค่าคู่คีย์ Amazon EC2 ของคุณโดยใช้ AWS Management Console สำหรับคำแนะนำในการสร้างคู่กุญแจสำหรับ Amazon EC2 ดูที่คู่มือเริ่มต้นใช้งาน Amazon Elastic Compute Cloud

การกำหนดค่าอินสแตนซ์ของเซิร์ฟเวอร์ Amazon EC2 ด้วย Elastic Beanstalk


1
ขอบคุณ @ kamal-essajidi! สำหรับผู้อื่นที่ใช้ EB: เมื่อคุณมีคู่คีย์คุณสามารถเพิ่มลงใน Elastic Beanstalk ของคุณในการกำหนดค่า> อินสแตนซ์> คู่คีย์ EC2
สกอตต์

4

คุณสามารถเพิ่มคีย์ใหม่ให้กับอินสแตนซ์ได้โดยใช้คำสั่งต่อไปนี้:

ssh-copy-id -i ~/.ssh/id_rsa.pub domain_alias

คุณสามารถกำหนดค่า domain_alias ใน ~ / .ssh config

host domain_alias
  User ubuntu
  Hostname domain.com
  IdentityFile ~/.ssh/ec2.pem

4

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

เพียงแค่ ssh ลงในกล่อง EC2 ของคุณด้วยคู่กุญแจที่มีอยู่ จากนั้นแก้ไข ~ / .ssh / authorized_keys และเพิ่มคีย์ใหม่ในบรรทัดใหม่ ออกและ ssh ผ่านเครื่องใหม่ ที่ประสบความสำเร็จ!


3

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

stackoverflow.com/questions/7881469/change-key-pair-for-ec2-instance


3

สำหรับสภาพแวดล้อม Elasticbeanstalk คุณสามารถใช้คู่คีย์ - ค่ากับอินสแตนซ์ที่กำลังทำงานดังนี้:

  • สร้างคู่คีย์ - ค่าจาก EC2 -> คู่กุญแจ (ภายใต้แท็บเครือข่ายและความปลอดภัย)
  • ไปที่ Elasticbeanstalk และคลิกที่แอปพลิเคชันของคุณ
  • ไปที่หน้าการกำหนดค่าและแก้ไขการตั้งค่าความปลอดภัย
  • เลือกคู่คีย์ EC2 ของคุณแล้วคลิกนำไปใช้
  • คลิกยืนยันเพื่อยืนยันการอัปเดต มันจะยุติสภาพแวดล้อมและใช้ค่าคีย์กับสภาพแวดล้อมของคุณ

1

คุณสามารถเพิ่มคู่กุญแจผ่านหน้ายืดหยุ่น beanstalk config จากนั้นรีสตาร์ทอินสแตนซ์ของคุณสำหรับคุณและทุกอย่างทำงานได้

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