Tambahkan Keypair ke instance EC2 yang ada


240

Saya diberi akses AWS Console ke akun dengan 2 kejadian berjalan yang tidak dapat saya tutup (dalam produksi). Namun saya ingin mendapatkan akses SSH ke instance ini, apakah mungkin membuat Keypair baru dan menerapkannya pada instance sehingga saya dapat memasukkan SSH? Memperoleh file pem yang ada untuk keypair contoh itu dibuat di bawah saat ini bukan pilihan.

Jika ini tidak mungkin, adakah cara lain yang bisa saya ambil untuk contoh ini?


Sudahkah Anda mencoba solusinya di sini: stackoverflow.com/questions/1454629/… ? ssh-addharus melakukan apa yang Anda butuhkan.
Marc Bollinger

Bagus untuk mempelajari fitur ssh-add tetapi ini tidak akan membantu karena pengguna ini benar-benar membuat instance menggunakan keypair yang ia buat. Contoh yang saya maksudkan dibuat dengan keypair lain yang saya tidak punya akses.
Chris Wagner

1
Mungkin Anda sebaiknya mengajukan pertanyaan ini di serverfault.com
Claude Vedovini

4
Anda tidak dapat menerapkan keypair ke instance yang sedang berjalan.
Rodney Quillo

Jawaban:


172

Anda tidak dapat menerapkan keypair ke instance yang berjalan. Anda hanya dapat menggunakan keypair baru untuk meluncurkan instance baru.

Untuk pemulihan, jika ini adalah boot AMI EBS, Anda dapat menghentikannya, membuat snapshot volume. Buat volume baru berdasarkan itu. Dan dapat menggunakannya kembali untuk memulai contoh lama, membuat gambar baru, atau memulihkan data.

Padahal data di penyimpanan sesaat akan hilang.


Karena popularitas pertanyaan dan jawaban ini, saya ingin menangkap informasi di tautan yang diposting Rodney pada komentarnya.

Penghargaan diberikan kepada Eric Hammond untuk informasi ini .

Memperbaiki File pada Volume EBS Root dari Mesin Virtual EC2

Anda dapat memeriksa dan mengedit file pada volume EBS root pada instance EC2 bahkan jika Anda berada dalam situasi yang Anda anggap seperti bencana:

  • Anda kehilangan kunci ssh atau lupa kata sandi
  • Anda membuat kesalahan saat mengedit file / etc / sudoers dan tidak dapat lagi mengakses root dengan sudo untuk memperbaikinya
  • Instansi lama Anda berjalan digantung karena alasan tertentu, tidak dapat dihubungi, dan gagal untuk boot dengan benar
  • Anda perlu memulihkan file dari instance tetapi tidak bisa mendapatkannya

Pada komputer fisik yang duduk di meja Anda, Anda bisa mem-boot sistem dengan CD atau stik USB, pasang hard drive, periksa dan perbaiki file-file tersebut, kemudian reboot komputer untuk kembali berbisnis.

Contoh EC2 jarak jauh, tampaknya jauh dan tidak dapat diakses ketika Anda berada dalam salah satu situasi ini. Untungnya, AWS memberi kita kekuatan dan fleksibilitas untuk dapat memulihkan sistem seperti ini, asalkan kita menjalankan instance boot EBS dan bukan instance-store.

Pendekatan pada EC2 agak mirip dengan solusi fisik, tetapi kita akan memindahkan dan memasang "hard drive" yang salah (volume root EBS) ke contoh yang berbeda, memperbaikinya, lalu memindahkannya kembali.

Dalam beberapa situasi, mungkin lebih mudah untuk memulai contoh EC2 baru dan membuang yang buruk, tetapi jika Anda benar-benar ingin memperbaiki file Anda, berikut adalah pendekatan yang telah bekerja untuk banyak orang:

Mempersiapkan

Identifikasi instance asli (A) dan volume yang berisi volume EBS root yang rusak dengan file yang ingin Anda lihat dan edit.

instance_a=i-XXXXXXXX

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

Identifikasi instance EC2 kedua (B) yang akan Anda gunakan untuk memperbaiki file pada volume EBS asli. Mesin virtual ini harus dijalankan di zona ketersediaan yang sama dengan mesin contoh A sehingga dapat memiliki volume EBS yang menyertainya. Jika Anda belum memiliki instance yang berjalan, mulailah yang sementara.

instance_b=i-YYYYYYYY

Hentikan instance yang rusak A (tunggu sampai berhenti total), lepaskan volume EBS root dari instance (tunggu sampai terlepas), lalu pasang volume ke instance B pada perangkat yang tidak digunakan.

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

ssh ke instance B dan pasang volume sehingga Anda dapat mengakses sistem file-nya.

ssh ...instance b...

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

Memperbaikinya

Pada titik ini seluruh sistem file root Anda dari instance A tersedia untuk dilihat dan diedit di / vol-a pada instance B. Misalnya, Anda mungkin ingin:

  • Masukkan kunci ssh yang benar di /vol-a/home/ubuntu/.ssh/authorized_keys
  • Edit dan perbaiki / vol-a / etc / sudoers
  • Cari pesan kesalahan di / vol-a / var / log / syslog
  • Salin file penting dari / vol-a / ...

Catatan: Uids pada dua instance mungkin tidak identik, jadi berhati-hatilah jika Anda membuat, mengedit, atau menyalin file milik pengguna non-root. Sebagai contoh, pengguna mysql Anda pada contoh A mungkin memiliki UID yang sama dengan pengguna postfix Anda pada contoh B yang dapat menyebabkan masalah jika Anda memberi tahu file dengan satu nama dan kemudian memindahkan volume kembali ke A.

Bungkus

Setelah selesai dan Anda senang dengan file-file di bawah / vol-a, unmount sistem file (masih pada instance-B):

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

Sekarang, kembali ke sistem Anda dengan ec2-api-tools, lanjutkan memindahkan volume EBS kembali ke rumah itu pada instance A asli dan mulai instance lagi:

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

Mudah-mudahan, Anda memperbaiki masalah, misalnya A muncul dengan baik, dan Anda dapat mencapai apa yang awalnya Anda lakukan. Jika tidak, Anda mungkin perlu terus mengulangi langkah-langkah ini sampai Anda berhasil.

Catatan: Jika Anda memiliki alamat IP elastis yang ditetapkan untuk instance A ketika Anda menghentikannya, Anda harus menghubungkannya kembali setelah memulai kembali.

Ingat! Jika instance B Anda untuk sementara waktu dimulai hanya untuk proses ini, jangan lupa untuk menghentikannya sekarang.


dapatkah Anda memberi tahu kami panduan langkah demi langkah untuk ini (atau arahkan ke sana). Dalam kasus saya, saya memiliki instance berjalan yang ada dan perlu masuk dari lokasi terpencil, di mana saya tidak memiliki kunci pribadi.
Jus12

87

Meskipun Anda tidak dapat menambahkan pasangan kunci ke instance EC2 yang sedang berjalan secara langsung, Anda dapat membuat pengguna linux dan membuat pasangan kunci baru untuknya, lalu menggunakannya seperti halnya dengan pasangan kunci pengguna asli.

Dalam kasus Anda, Anda dapat meminta pemilik instance (yang membuatnya) untuk melakukan hal berikut. Dengan demikian, pemilik instance tidak harus membagikan kuncinya sendiri kepada Anda, tetapi Anda masih dapat melakukan ssh ke instance ini. Langkah-langkah ini awalnya diposting oleh Utkarsh Sengar (alias. @ Zengr ) di http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/ . Saya hanya membuat beberapa perubahan kecil.

  1. Langkah 1: login secara default "ubuntu" pengguna :

    $ ssh -i my_orig_key.pem ubuntu@111.111.11.111
    
  2. Langkah 2: buat pengguna baru, kami akan memanggil pengguna baru kami "john" :

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

    Setel kata sandi untuk "john" oleh:

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

    Tambahkan "john" ke daftar sudoer dengan:

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

    .. dan tambahkan berikut ini di akhir file:

    john   ALL = (ALL)    ALL
    

    Baik! Kami telah membuat pengguna baru kami, sekarang Anda perlu membuat file kunci yang akan diperlukan untuk login, seperti kami memiliki my_orin_key.pem di Langkah 1.

    Sekarang, keluar dan kembali ke ubuntu, dari root.

    [root@ip-11-111-111-111 ubuntu]# exit
    [ubuntu@ip-11-111-111-111 ~]$
    
  3. Langkah 3: membuat kunci publik dan pribadi :

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

    Masukkan kata sandi yang Anda buat untuk "john" di Langkah 2. Kemudian buat pasangan kunci. Ingat bahwa frasa sandi untuk pasangan kunci harus minimal 4 karakter.

    [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
    

    Pada langkah di atas, john adalah pengguna yang kami buat dan ubuntu adalah grup pengguna default.

    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh/authorized_keys
    
  4. Langkah 4: sekarang Anda hanya perlu mengunduh kunci yang disebut "john" . Saya menggunakan scp untuk mengunduh / mengunggah file dari EC2, berikut adalah bagaimana Anda dapat melakukannya.

    Anda masih perlu menyalin file menggunakan pengguna ubuntu , karena Anda hanya memiliki kunci untuk nama pengguna itu. Jadi, Anda perlu memindahkan kunci ke folder ubuntu dan chmod ke 777.

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

    Sekarang datang ke terminal mesin lokal, di mana Anda memiliki file my_orig_key.pem dan lakukan ini:

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

    Perintah di atas akan menyalin kunci “john” ke direktori yang berfungsi sekarang pada mesin lokal Anda. Setelah Anda menyalin kunci ke mesin lokal Anda, Anda harus menghapus "/ home / ubuntu / john", karena itu adalah kunci pribadi.

    Sekarang, satu mesin lokal Anda chmod john ke 600.

    $ chmod 600 john
    
  5. Langkah 5: waktu untuk menguji kunci Anda :

    $ ssh -i john john@111.111.11.111
    

Jadi, dengan cara ini, Anda dapat mengatur beberapa pengguna untuk menggunakan satu contoh EC2 !!


4
Ini berguna, tetapi sebagai langkah terakhir haruskah Anda juga tidak menghapus kunci privat dari mesin jarak jauh? Dengan cara itu orang lain yang memiliki akses ke instance tidak dapat juga menyalinnya dan menggunakan kunci Anda untuk login.
culix

Ini bekerja untuk saya. Tapi bagaimana saya menavigasi ke pengguna ubuntu dari sini karena file yang akan saya kerjakan ada di direktori pengguna ubuntu. Ini akan membawa saya ke grup pengguna john. Ubuntu 14.04.4 LTS
olyjosh

Ini tidak berhasil untuk saya. Itu memberi izin tidak valid. Saya harus membuat pasangan kunci dari konsol ec2 kemudian mulai bekerja
dark knight

11

Di mesin lokal Anda, jalankan perintah:

ssh-keygen -t rsa -C "SomeAlias"

Setelah perintah itu berjalan, file yang diakhiri dengan * .pub akan dibuat. Salin konten file itu.

Pada mesin Amazon, edit ~ / .ssh / otor_keys dan rekatkan isi file * .pub (dan hapus semua konten yang ada terlebih dahulu).

Anda kemudian dapat SSH menggunakan file lain yang dihasilkan dari perintah ssh-keygen (kunci pribadi).


Jadi seperti @Dan menyebutkan bahwa mungkin untuk mengubah akses ke instance Anda mengedit file ini, tetapi Anda tidak akan pernah dapat mengubah keypair yang terkait dengan instance pada tingkat data meta. Jangan lupa untuk menambahkan nama file .pem di akhir publicKey Anda, mis:ssh-rsa AAAAB3NzaC1yc2EA...DsGt66 my-key-pair
Ricardo Mutti

7

Ini terjadi pada saya sebelumnya (tidak memiliki akses ke instance EC2 yang dibuat orang lain tetapi memiliki akses ke konsol web AWS) dan saya menulis blog jawabannya: http://readystate4.com/2013/04/09/aws-gaining- ssh-access-to-an-ec2-instance-you-lost-access-to /

Pada dasarnya, Anda dapat melepaskan drive EBS, melampirkannya ke EC2 yang Anda miliki aksesnya. Tambahkan kunci pub SSH Anda ke ~ec2-user/.ssh/authorized_keyspada drive terlampir ini. Kemudian kembalikan ke instance EC2 yang lama. langkah-demi-langkah dalam tautan menggunakan Amazon AMI.

Tidak perlu membuat snapshot atau membuat instance kloning baru.


6

Dalam kasus saya, saya menggunakan dokumentasi ini untuk mengaitkan pasangan kunci dengan mesin Beanstalk elastis saya

Penting

Anda harus membuat pasangan kunci Amazon EC2 dan mengonfigurasi instance Amazon EC2 yang disediakan oleh Beanstalk Elastis Anda untuk menggunakan pasangan kunci Amazon EC2 sebelum Anda dapat mengakses instance Amazon EC2 yang disediakan oleh Elastic Beanstalk Anda. Anda dapat mengatur pasangan kunci Amazon EC2 Anda menggunakan AWS Management Console. Untuk instruksi tentang cara membuat pasangan kunci untuk Amazon EC2, lihat Panduan Memulai Cloud Elastic Amazon Compute.

Mengkonfigurasi Instance Server Amazon EC2 dengan Elastic Beanstalk


1
Terima kasih, @ kamal-essajidi! Untuk yang lain menggunakan EB: setelah Anda memiliki pasangan kunci, Anda dapat menambahkannya ke Elastic Beanstalk Anda di Konfigurasi> Instance> Pasangan kunci EC2.
Scott

4

Anda bisa menambahkan kunci baru ke instance dengan perintah berikut:

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

Anda dapat mengkonfigurasi domain_alias di konfigurasi ~ / .ssh

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

4

Saya tidak menemukan cara mudah untuk menambahkan pasangan kunci baru melalui konsol, tetapi Anda dapat melakukannya secara manual.

Cukup ssh ke kotak EC2 Anda dengan pasangan kunci yang ada. Kemudian edit tombol ~ / .ssh / authorized_key dan tambahkan kunci baru pada baris baru. Keluar dan ssh melalui mesin baru. Keberhasilan!



3

Untuk lingkungan Elasticbeanstalk, Anda bisa menerapkan pasangan kunci-nilai pada instance berjalan seperti ini:

  • Buat pasangan nilai kunci dari EC2 -> Pasangan Kunci (Di bawah tab JARINGAN & KEAMANAN)
  • Pergi ke Elasticbeanstalk dan klik pada aplikasi Anda
  • Buka halaman konfigurasi dan ubah pengaturan keamanan
  • Pilih pasangan kunci EC2 Anda dan klik Terapkan
  • Klik konfirmasi untuk mengonfirmasi pembaruan. Ini akan menghentikan lingkungan dan menerapkan nilai kunci ke lingkungan Anda.

1

Anda benar-benar dapat menambahkan pasangan kunci melalui halaman konfigurasi beanstalk elastis. kemudian restart contoh Anda untuk Anda dan semuanya berfungsi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.