Thêm khóa cho ví dụ EC2 hiện có


239

Tôi đã được cấp quyền truy cập Bảng điều khiển AWS vào tài khoản có 2 phiên bản đang chạy mà tôi không thể tắt (trong sản xuất). Tuy nhiên, tôi muốn có được quyền truy cập SSH vào các phiên bản này, liệu có thể tạo một Key Pair mới và áp dụng nó cho các phiên bản để tôi có thể SSH vào không? Có được tệp pem hiện tại cho cặp khóa mà các thể hiện được tạo ra hiện không phải là một tùy chọn.

Nếu điều này là không thể thì có cách nào khác tôi có thể tham gia vào các trường hợp không?


Bạn đã thử giải pháp ở đây chưa: stackoverflow.com/questions/1454629/ trên ? ssh-addnên làm những gì bạn cần
Marc Bollinger

Rất vui được tìm hiểu tính năng ssh-add nhưng điều này sẽ không hữu ích vì người dùng này thực sự đã tạo ra cá thể bằng cách sử dụng khóa ghép mà anh ta đã tạo. Các trường hợp mà tôi đang đề cập đến đã được tạo ra với một cặp khóa khác mà tôi không có quyền truy cập.
Chris Wagner

1
Có thể bạn nên hỏi câu hỏi này trên serverfault.com
Claude Vedovini

4
Bạn không thể áp dụng một cặp khóa cho một trường hợp đang chạy.
Rodney Quillo

Câu trả lời:


172

Bạn không thể áp dụng một cặp khóa cho một trường hợp đang chạy. Bạn chỉ có thể sử dụng cặp khóa mới để khởi chạy một thể hiện mới.

Để khôi phục, nếu đó là AMI khởi động EBS, bạn có thể dừng nó, tạo ảnh chụp nhanh âm lượng. Tạo một khối lượng mới dựa trên nó. Và có thể sử dụng nó trở lại để bắt đầu phiên bản cũ, tạo một hình ảnh mới hoặc khôi phục dữ liệu.

Mặc dù dữ liệu lưu trữ phù du sẽ bị mất.


Do sự phổ biến của câu hỏi và câu trả lời này, tôi muốn nắm bắt thông tin trong liên kết mà Rodney đăng trên bình luận của mình.

Tín dụng cho Eric Hammond cho thông tin này .

Sửa các tệp trên Khối lượng EBS gốc của Trường hợp EC2

Bạn có thể kiểm tra và chỉnh sửa các tệp trên ổ EBS gốc trên phiên bản EC2 ngay cả khi bạn đang ở trong tình huống mà bạn cho là tình huống thảm hại như:

  • Bạn bị mất khóa ssh hoặc quên mật khẩu
  • Bạn đã mắc lỗi chỉnh sửa tệp / etc / sudoers và không thể truy cập root bằng sudo để sửa nó
  • Ví dụ chạy dài của bạn bị treo vì một số lý do, không thể liên lạc được và không khởi động đúng cách
  • Bạn cần khôi phục các tập tin khỏi thể hiện nhưng không thể truy cập vào nó

Trên máy tính vật lý đang ngồi ở bàn làm việc, bạn có thể chỉ cần khởi động hệ thống bằng đĩa CD hoặc USB, gắn ổ cứng, kiểm tra và sửa các tệp, sau đó khởi động lại máy tính để hoạt động trở lại.

Tuy nhiên, một ví dụ EC2 từ xa có vẻ xa vời và không thể truy cập khi bạn ở trong một trong những tình huống này. May mắn thay, AWS cung cấp cho chúng tôi sức mạnh và tính linh hoạt để có thể khôi phục một hệ thống như thế này, miễn là chúng tôi đang chạy các phiên bản khởi động EBS chứ không phải lưu trữ thể hiện.

Cách tiếp cận trên EC2 có phần giống với giải pháp vật lý, nhưng chúng tôi sẽ di chuyển và gắn ổ cứng cứng bị lỗi cứng (khối lượng EBS gốc) vào một phiên bản khác, sửa nó, sau đó di chuyển nó trở lại.

Trong một số trường hợp, có thể dễ dàng bắt đầu một phiên bản EC2 mới và loại bỏ trường hợp xấu, nhưng nếu bạn thực sự muốn sửa các tệp của mình, đây là cách tiếp cận hiệu quả với nhiều người:

Thiết lập

Xác định thể hiện ban đầu (A) và âm lượng chứa âm lượng EBS gốc bị hỏng với các tệp bạn muốn xem và chỉnh sửa.

instance_a=i-XXXXXXXX

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

Xác định phiên bản EC2 thứ hai (B) mà bạn sẽ sử dụng để sửa các tệp trên ổ đĩa EBS gốc. Trường hợp này phải được chạy trong cùng vùng khả dụng với thể hiện A để nó có thể có âm lượng EBS được gắn vào nó. Nếu bạn không có phiên bản nào đang chạy, hãy bắt đầu một phiên bản tạm thời.

instance_b=i-YYYYYYYY

Dừng phiên bản A bị hỏng (chờ cho đến khi dừng hoàn toàn), tách âm lượng EBS gốc khỏi phiên bản (chờ để tách ra), sau đó gắn âm lượng vào phiên bản B trên thiết bị không sử dụng.

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

ssh đến ví dụ B và gắn âm lượng để bạn có thể truy cập hệ thống tệp của nó.

ssh ...instance b...

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

Sửa nó

Tại thời điểm này, toàn bộ hệ thống tệp gốc của bạn từ phiên bản A có sẵn để xem và chỉnh sửa trong / vol-a trên ví dụ B. Ví dụ: bạn có thể muốn:

  • Đặt các khóa ssh chính xác trong /vol-a/home/ubfox/.ssh/authorized_keys
  • Chỉnh sửa và sửa lỗi / vol-a / etc / sudoers
  • Tìm thông báo lỗi trong / vol-a / var / log / syslog
  • Sao chép các tập tin quan trọng ra khỏi / vol-a /.

Lưu ý: Các uids trên hai trường hợp có thể không giống nhau, vì vậy hãy cẩn thận nếu bạn đang tạo, chỉnh sửa hoặc sao chép các tệp thuộc về người dùng không root. Ví dụ: người dùng mysql của bạn trong trường hợp A có thể có cùng UID với người dùng postfix của bạn trong trường hợp B, điều này có thể gây ra sự cố nếu bạn chọn các tệp có một tên và sau đó di chuyển âm lượng trở lại A.

Gói (lại

Sau khi bạn hoàn thành và bạn hài lòng với các tệp trong / vol-a, hãy ngắt kết nối hệ thống tệp (vẫn trong trường hợp-B):

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

Bây giờ, hãy quay lại hệ thống của bạn với các công cụ ec2-api, tiếp tục di chuyển âm lượng EBS trở về nhà trên phiên bản A ban đầu và bắt đầu lại phiên bản:

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

Hy vọng rằng, bạn đã khắc phục sự cố, ví dụ A xuất hiện tốt và bạn có thể hoàn thành những gì bạn đặt ra ban đầu. Nếu không, bạn có thể cần tiếp tục lặp lại các bước này cho đến khi bạn làm việc.

Lưu ý: Nếu bạn có địa chỉ IP đàn hồi được gán cho phiên bản A khi bạn dừng địa chỉ đó, bạn sẽ cần liên kết lại địa chỉ đó sau khi khởi động lại.

Nhớ lại! Nếu phiên bản B của bạn tạm thời được bắt đầu chỉ cho quá trình này, đừng quên chấm dứt ngay bây giờ.


bạn có thể cho chúng tôi một hướng dẫn từng bước cho việc này (hoặc chỉ vào nó). Trong trường hợp của tôi, tôi có một phiên bản đang chạy và cần phải đăng nhập vào nó từ một địa điểm từ xa, nơi tôi không có khóa riêng.
Jus12

87

Mặc dù bạn không thể trực tiếp thêm một cặp khóa vào một phiên bản EC2 đang chạy, nhưng bạn có thể tạo một người dùng linux và tạo một cặp khóa mới cho anh ta, sau đó sử dụng nó như bạn làm với cặp khóa gốc của người dùng.

Trong trường hợp của bạn, bạn có thể yêu cầu chủ sở hữu cá thể (người đã tạo ra nó) làm như sau. Do đó, chủ sở hữu cá thể không phải chia sẻ khóa riêng của mình với bạn, nhưng bạn vẫn có thể ssh vào các trường hợp này. Những bước ban đầu được đăng bởi Utkarsh Sengar (aka. @Zengr ) tại http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/ . Tôi chỉ thực hiện một vài thay đổi nhỏ.

  1. Bước 1: đăng nhập theo người dùng mặc định của ub Ubuntu, mặc định :

    $ ssh -i my_orig_key.pem ubuntu@111.111.11.111
    
  2. Bước 2: tạo một người dùng mới, chúng tôi sẽ gọi cho người dùng mới của chúng tôi “john” :

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

    Đặt mật khẩu cho Tweets john bởi:

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

    Thêm vào john Cảnh vào danh sách của sudoer bằng cách:

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

    .. và thêm phần sau vào cuối tệp:

    john   ALL = (ALL)    ALL
    

    Ổn thỏa! Chúng tôi đã tạo người dùng mới, bây giờ bạn cần tạo tệp chính cần thiết để đăng nhập, như chúng tôi có my_orin_key.pem trong Bước 1.

    Bây giờ, thoát và quay trở lại Ubuntu, ra khỏi root.

    [root@ip-11-111-111-111 ubuntu]# exit
    [ubuntu@ip-11-111-111-111 ~]$
    
  3. Bước 3: tạo khóa chung và khóa riêng :

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

    Nhập mật khẩu bạn đã tạo cho Tweets john Hướng trong Bước 2. Sau đó tạo một cặp khóa. Hãy nhớ rằng cụm mật khẩu cho cặp khóa phải có ít nhất 4 ký tự.

    [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
    

    Trong bước trên, john là người dùng chúng tôi đã tạo và ubfox là nhóm người dùng mặc định.

    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh/authorized_keys
    
  4. Bước 4: bây giờ bạn chỉ cần tải xuống khóa có tên là john j . Tôi sử dụng scp để tải xuống / tải lên các tệp từ EC2, đây là cách bạn có thể làm điều đó.

    Bạn vẫn sẽ cần sao chép tệp bằng người dùng Ubuntu , vì bạn chỉ có khóa cho tên người dùng đó. Vì vậy, bạn sẽ cần di chuyển khóa vào thư mục ubfox và chmod nó thành 777.

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

    Bây giờ hãy đến thiết bị đầu cuối của máy cục bộ, nơi bạn có tệp my_orig_key.pem và thực hiện việc này:

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

    Lệnh trên sẽ sao chép khóa chính john Cảnh vào thư mục làm việc hiện tại trên máy cục bộ của bạn. Khi bạn đã sao chép khóa vào máy cục bộ của mình, bạn nên xóa xóa / home / ubfox / john, vì đó là khóa riêng.

    Bây giờ, một máy cục bộ của bạn chmod john đến 600.

    $ chmod 600 john
    
  5. Bước 5: thời gian để kiểm tra khóa của bạn :

    $ ssh -i john john@111.111.11.111
    

Vì vậy, theo cách này, bạn có thể thiết lập nhiều người dùng để sử dụng một phiên bản EC2 !!


4
Điều này rất hữu ích, nhưng là bước cuối cùng, bạn cũng không nên xóa khóa riêng ra khỏi máy từ xa? Bằng cách đó, những người khác có quyền truy cập vào thể hiện cũng không thể sao chép nó và sử dụng khóa của bạn để đăng nhập.
Culix 18/12/13

Điều này làm việc cho tôi. Nhưng làm thế nào để tôi điều hướng đến người dùng ubfox từ đây vì các tệp tôi sẽ làm việc nằm trong thư mục người dùng ubfox. Điều này sẽ đưa tôi đến nhóm người dùng john. Ubuntu 14.04.4 LTS
olyjosh

Điều này đã không làm việc cho tôi. Nó đã cho phép không hợp lệ. Tôi đã phải tạo cặp chìa khóa từ bảng điều khiển ec2 sau đó nó bắt đầu hoạt động
hiệp sĩ bóng đêm

11

Trên máy cục bộ của bạn, chạy lệnh:

ssh-keygen -t rsa -C "SomeAlias"

Sau khi lệnh đó chạy, một tệp kết thúc bằng * .pub sẽ được tạo. Sao chép nội dung của tập tin đó.

Trên máy Amazon, chỉnh sửa ~ / .ssh / ủy quyền và dán nội dung của tệp * .pub (và xóa mọi nội dung hiện có trước).

Sau đó, bạn có thể SSH bằng cách sử dụng tệp khác được tạo từ lệnh ssh-keygen (khóa riêng).


Vì vậy, giống như @Dan đã đề cập đến việc có thể thay đổi quyền truy cập vào cá thể của bạn để chỉnh sửa tệp này, nhưng bạn sẽ không bao giờ có thể thay đổi cặp khóa liên quan đến cá thể ở mức dữ liệu meta. Đừng quên thêm tên tệp .pem vào cuối khóa công khai của bạn, ví dụ:ssh-rsa AAAAB3NzaC1yc2EA...DsGt66 my-key-pair
Ricardo Mutti

7

Điều này đã xảy ra với tôi trước đó (không có quyền truy cập vào một phiên bản EC2 do người khác tạo ra nhưng có quyền truy cập vào bảng điều khiển web AWS) và tôi đã viết câu trả lời: http://readystate4.com/2013/04/09/aws-gained- ssh-access-to-an-ec2-instance-you-Mất-access-to /

Về cơ bản, bạn có thể tách ổ đĩa EBS, gắn nó vào EC2 mà bạn có quyền truy cập. Thêm khóa pub SSH của bạn ~ec2-user/.ssh/authorized_keysvào ổ đĩa đính kèm này. Sau đó đặt nó trở lại vào ví dụ EC2 cũ. từng bước trong liên kết sử dụng Amazon AMI.

Không cần phải tạo ảnh chụp nhanh hoặc tạo một bản sao mới.


6

Trong trường hợp của tôi, tôi đã sử dụng tài liệu này để liên kết một cặp khóa với ví dụ của Bean Beanalk

Quan trọng

Bạn phải tạo một cặp khóa Amazon EC2 và định cấu hình các phiên bản Amazon EC2 được cung cấp của bạn để sử dụng cặp khóa Amazon EC2 trước khi bạn có thể truy cập vào các phiên bản Amazon EC2 được cung cấp của bạn. Bạn có thể thiết lập các cặp khóa Amazon EC2 của mình bằng Bảng điều khiển quản lý AWS. Để biết hướng dẫn về cách tạo cặp khóa cho Amazon EC2, hãy xem Hướng dẫn bắt đầu điện toán đám mây đàn hồi của Amazon.

Định cấu hình Máy chủ Amazon EC2 bằng Bean Beanalk


1
Cảm ơn, @ kamal-essajidi! Đối với những người khác sử dụng EB: một khi bạn có một cặp khóa, bạn có thể thêm nó vào Cây đậu đàn hồi trong Cấu hình> Trường hợp> Cặp khóa EC2.
Scott

4

Bạn chỉ có thể thêm một khóa mới vào thể hiện bằng lệnh sau:

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

Bạn có thể định cấu hình domain_alias trong cấu hình ~ / .ssh

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

4

Tôi không tìm thấy một cách dễ dàng để thêm một cặp khóa mới thông qua bảng điều khiển, nhưng bạn có thể làm điều đó bằng tay.

Chỉ cần ssh vào hộp EC2 của bạn với cặp khóa hiện có. Sau đó chỉnh sửa ~ / .ssh / ủy quyền và thêm khóa mới trên một dòng mới. Thoát và ssh qua máy mới. Sự thành công!



2

Đối với môi trường đàn hồi, bạn có thể áp dụng cặp khóa-giá trị cho trường hợp đang chạy như sau:

  • Tạo cặp khóa-giá trị từ EC2 -> Cặp khóa (Trong tab MẠNG & BẢO MẬT)
  • Đi đến Elasticbeanstalk và nhấp vào ứng dụng của bạn
  • Chuyển đến trang cấu hình và sửa đổi cài đặt bảo mật
  • Chọn cặp khóa EC2 của bạn và nhấp vào Áp dụng
  • Nhấp vào xác nhận để xác nhận cập nhật. Nó sẽ chấm dứt môi trường và áp dụng giá trị chính cho môi trường của bạn.

0

Bạn thực sự có thể thêm một cặp khóa thông qua trang cấu hình beanstalk đàn hồi. sau đó nó khởi động lại cá thể của bạn cho bạn và mọi thứ hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.