Làm cách nào để tải xuống khóa công khai từ Amazon AWS?


25

Tôi có một phiên bản linux amazon ec2 đang chạy được liên kết với một cặp khóa (p1) và tôi đã tải khóa riêng về máy tính để bàn của mình. Bây giờ tại nơi làm việc, tôi đã tạo một cặp khóa (p2) trên máy tính để bàn của mình và nhập khóa công khai vào Amazon thông qua bảng điều khiển AWS.

Ở nhà, tôi muốn thêm khóa công khai của khóa ghép p2 để thêm vào authorized_keysví dụ AMI của tôi (mà hiện tại tôi chỉ có thể truy cập từ nhà). Tuy nhiên, tôi đã quên mang theo khóa công khai của p2, vì vậy bằng cách nào đó có thể xuất khóa công khai này từ Amazon.

Câu trả lời:


6

Câu đố hay, cảm ơn! Đây là một câu trả lời:

  1. Bắt đầu một phiên bản khởi động EBS mới t1.micro A, chỉ định cặp khóa p2. Chỉ định vùng khả dụng nơi bạn có một phiên bản B khác đang chạy và nơi bạn có quyền truy cập. (Bắt đầu tạm thời nếu cần).

  2. Dừng (không chấm dứt) trường hợp A sau khi nó ở trạng thái chạy trong vài phút, do đó, nó có cơ hội lưu khóa công khai vào tệp ủy quyền của nó.

  3. Tách khối lượng EBS gốc khỏi phiên bản đã dừng A. Đính kèm và gắn nó vào phiên bản đang chạy B.

  4. Sao chép khóa chung từ hệ thống tệp được gắn.

  5. Tháo và xóa âm lượng EBS. Chấm dứt trường hợp tạm thời A.


1
Không chắc chắn làm thế nào điều này thực sự giải quyết được câu hỏi ban đầu ... đó chắc chắn là một cách để đối phó với các phiên bản AWS EC2 nếu và chỉ khi bạn đang sử dụng các phiên bản được hỗ trợ bởi EBS.
Jeremy Bouse

Bạn không cần phải sử dụng các phiên bản khởi động EBS ngoại trừ một lần bạn chạy phiên bản tạm thời để lấy khóa công khai khỏi nó. Tất cả những gì bạn muốn làm là lấy khóa công khai mà phương pháp này thực hiện.
Eric Hammond

1
Nếu bạn có khóa riêng, bạn có thể tạo lại khóa chung mà không cần thông qua các biện pháp đó.
Jeremy Bouse

2
Jeremy: Dựa trên câu hỏi ban đầu, khóa riêng đã quay lại văn phòng của anh ta nơi anh ta không thể lấy được. Và một khi anh ta quay lại văn phòng, anh ta không thể vào ví dụ EC2 vì nó không có khóa chung cho khóa riêng của văn phòng đó. Đó là lý do tại sao anh ta muốn lấy khóa công khai từ Amazon và cách duy nhất để làm điều đó là bắt đầu một phiên bản với khóa chung đó. Sau đó, bạn phải lấy khóa công khai ra khỏi trường hợp đó là phần khó khăn.
Eric Hammond

1
ồ rất nhiều công việc để có được khóa công khai. Amazon sẽ dễ dàng hơn khi đặt tùy chọn "Xuất khóa công khai".
Jus12

37

Tuy nhiên, lệnh ssh-keygen chính xác là:

ssh-keygen -y -f /path/to/privatekey > /path/to/publickey

Đây phải là một bình luận hoặc đề xuất chỉnh sửa trên câu trả lời trước. Bạn đúng mặc dù.
JC Bông

Bạn đúng điều này nên đã được một nhận xét. Thật không may, tôi chưa giành được đặc quyền để bình luận :-(
rsmoorthy

haha, bạn đến đó đi Cảm ơn cho chiming trong với sự điều chỉnh.
JC Bông

Câu trả lời này sẽ hoạt động nếu anh ta có quyền truy cập vào khóa riêng, nhưng trong câu hỏi ban đầu, khóa riêng đó ở một vị trí khác và không thể truy cập được.
Eric Hammond

1
chạy chmod 400 your_private_key.pemnếu bạn nhận được "Lỗi quá mở"
crizCraig

7

Tôi đã cung cấp một câu trả lời sử dụng âm lượng EBS để lấy khóa công khai ssh, nhưng đây là một cách khác bạn có thể nhận được bằng cách bắt đầu một phiên bản EC2 tạm thời với tập lệnh dữ liệu người dùng gửi khóa chung tới đầu ra của bàn điều khiển. Dưới đây là các bước:

Lưu mã sau vào một tệp có tên output-ssh-key.userdatatrên máy tính cục bộ của bạn. ĐỪNG CHẠY NHỮNG QUYẾT ĐỊNH NÀY!

#!/bin/bash -ex
exec> >(tee /var/log/user-data.log|logger -t user -s 2>/dev/console) 2>&1
adminkey=$(GET instance-data/latest/meta-data/public-keys/ | 
  perl -ne 'print $1 if /^0=[^a-z0-9]*([-.@\w]*)/i')
cat <<EOF
SSHKEY:========================================================================
SSHKEY:HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "$adminkey":
SSHKEY:$(cat /home/ubuntu/.ssh/authorized_keys)
SSHKEY:========================================================================
SSHKEY:Halting in 50min ($(date --date='+50 minutes' +"%Y-%m-%d %H:%M UTC"))
EOF
sleep 3000
halt

Chạy một ví dụ Ubuntu 10.04 LTS với tệp ở trên dưới dạng tập lệnh dữ liệu người dùng. Chỉ định cặp khóa mà bạn muốn lấy khóa ssh công khai:

ec2-run-instances \
  --key YOURKEYPAIRHERE \
  --instance-type t1.micro \
  --instance-initiated-shutdown-behavior terminate \
  --user-data-file output-ssh-key.userdata \
  ami-ab36fbc2

Tiếp tục yêu cầu đầu ra giao diện điều khiển từ phiên bản cho đến khi nó hiển thị khóa ssh công khai của bạn. Chỉ định id cá thể được trả về từ lệnh run-instance:

ec2-get-console-output YOURINSTANCEID | grep SSHKEY: | cut -f3- -d:

Trong vòng 2-10 phút, bạn sẽ nhận được đầu ra như thế này:

========================================================================
HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "erich":
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6rn8cl41CkzaH4ZBhczOJZaR4xBBDI1Kelc2ivzVvCB
THcdJRWpDd5I5hY5W9qke9Tm4fH3KaUVndlcP0ORGvS3PAL4lTpkS4D4goMEFrwMO8BG0NoE8sf2U/7g
aUkdcrDC7jzKYdwleRCI3uibNXiSdeG6RotClAAp7pMflDVp5WjjECDZ+8Jzs2wasdTwQYPhiWSiNcfb
fS97QdtROf0AcoPWElZAgmabaDFBlvvzcqxQRjNp/zbpkFHZBSKp+Sm4+WsRuLu6TDe9lb2Ps0xvBp1F
THlJRUVKP2yeZbVioKnOsXcjLfoJ9TEL7EMnPYinBMIE3kAYw3FzZZFeX3Q== erich
========================================================================
Halting in 50min (2011-12-20 05:58 UTC)

Ví dụ tạm thời sẽ tự động chấm dứt trong vòng một giờ, nhưng bạn có thể tự chấm dứt nếu bạn muốn đảm bảo rằng bạn không bị tính phí nhiều hơn hai xu mà chi phí này sẽ chạy.


Tôi đã thử điều này với một bản cài đặt hiện đại của awscli và nó đã hoạt động với tập lệnh dữ liệu người dùng của bạn. Tuy nhiên tôi đã phải điều chỉnh các lệnh một chút. Điều này làm việc cho khu vực eu-west-1: aws ec2 run-instance --key-name mykey --instance-type t1.micro --instance-initated-shutdown-behavior terminating --user-data file: // output- ssh-key.userdata --image-id ami-c1167eb8; aws ec2 get-console-output --instance-id i-0ce56c0e02086160d; aws ec2 terminating-instance --instance-id i-0ce56c0e02086160d
holmb

(Đã chỉnh sửa) Định dạng Ok ở đây thật kinh khủng, tôi sẽ đăng dưới dạng câu trả lời khác nhau.
Bernhard

5

Nếu bạn có khóa SSH riêng, bạn có thể tạo lại thành phần khóa chung chỉ bằng cách chạy lệnh ssh-keygen sau:

 ssh-keygen -i -f /path/to/private-key > /path/to/public-key

Đó là phần đơn giản ... Bảng điều khiển AWS và API không hỗ trợ đẩy 2 bàn phím khi bắt đầu phiên bản EC2. Đây là một bài tập còn lại để quản trị viên hệ thống thực hiện thông qua các phương tiện khác.

Nếu bạn có quyền truy cập vào khóa nhận dạng đã được ủy quyền, bạn chỉ cần thực hiện lệnh ssh-copy-id sau đây:

 ssh-copy-id -i /path/to/public-key user@EC2-instance

Điều này sẽ sao chép khóa công khai đã cho vào máy chủ và ~user/.ssh/authorized_keystự động vào tệp cho bạn và đảm bảo quyền thích hợp trên tệp.

Cách thanh lịch hơn sẽ là bao gồm các khóa nhận dạng bổ sung trong các quy trình quản lý cấu hình của bạn. Trong trường hợp của tôi, điều này đòi hỏi phải thêm các khóa bổ sung vào cấu hình Puppet cho nút.

Là một lưu ý phụ, sở thích cá nhân nhưng sẽ sử dụng phương pháp quản lý khóa SSH tốt hơn là chỉ cần bao gồm các khóa riêng cho vị trí làm việc và nhà. Như tôi đã đề cập trong một câu hỏi trước đây, tôi duy trì các khóa của mình trên ổ USB mà tôi luôn mang theo bên mình thay vì trên bất kỳ máy tính nào tôi sử dụng.


0

Một tùy chọn khác là thêm một đoạn script ngắn trong user_data, chỉ cần thêm một khóa ssh khác vào root:

#!/bin/bash

touch ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys

echo "<KEY>" >> ~/.ssh/authorized_keys

Sau đó, bạn có thể đăng nhập vào máy với quyền root ssh -l root -i <KEYFILE> URLvà chỉ cần đọc khóa từ ủy quyền của người dùng ec2_user, ubfox hoặc tuy nhiên nó được gọi.

Điều duy nhất - bạn cần làm cho máy có thể truy cập công khai và đảm bảo có thể truy cập vào cổng 22 từ bên ngoài.

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.