Açık anahtar Amazon AWS'den nasıl indirilir?


25

Bir keypair (p1) ile ilişkili çalışan amazon ec2 linux örneğim var ve özel anahtarı ev masaüstüme indirdim. Şimdi işte, çalışma masamda bir keypair (p2) oluşturdum ve genel anahtarı AWS konsolu üzerinden Amazon'a aktardım.

Evde, authorized_keysAMI örneğime eklenecek p2 keypair anahtarının genel anahtarını eklemek istiyorum (şu anda yalnızca evden erişebiliyorum). Ancak p2'nin kamu anahtarını yanımda getirmeyi unuttum, bu kamu anahtarını bir şekilde Amazon'dan dışa aktarmak mümkün olabilir.

Yanıtlar:


6

Güzel puzzle, teşekkürler! İşte bir cevap:

  1. Keypair p2'yi belirten yeni bir geçici EBS boot t1.micro örnek A başlatın. Çalışmakta olan ve erişiminiz olan başka bir B örneğinin bulunduğu bir kullanılabilirlik bölgesi belirtin. (Gerekirse geçici bir tane başlatın).

  2. Birkaç dakika boyunca çalışma durumunda kaldıktan sonra A örneğini durdurun (sonlandırmayın), bu nedenle genel anahtarı yetkili_keys dosyasına kaydetme şansı vardır.

  3. Kök EBS birimini durdurulmuş örnek A'dan ayırın. Ekleyen ve çalışan örnek B'nize bağlayın.

  4. Açık anahtarı bağlı dosya sisteminden kopyalayın.

  5. EBS birimini ayırın ve silin. Geçici A vakasını sonlandırın.


1
Bunun aslında asıl soruyu nasıl çözdüğünden emin değilim ... kesinlikle ve sadece EBS-destekli örnekleri kullanıyorsanız, AWS EC2 örnekleri ile başa çıkmanın bir yoludur.
Jeremy Bouse

Genel anahtarı almak için geçici örneği çalıştırdığınız bir sefer dışında EBS önyükleme örneklerini kullanmak zorunda değilsiniz. Tek yapmak istediğiniz, bu yaklaşımın yaptığı ortak anahtarı almak.
Eric Hammond

1
Özel anahtarınız varsa, bu tür önlemleri almadan genel anahtarı yeniden oluşturabilirsiniz.
Jeremy Bouse,

2
Jeremy: Asıl soruya göre, özel anahtar ofisinde, alamadığı bir yere döndü. Ve bir kez ofise döndüğünde EC2 örneğine giremez çünkü o ofisteki özel anahtarın ortak anahtarına sahip değildir. Bu yüzden Amazon'dan ortak anahtarı almak istiyor ve bunu yapmanın tek yolu bu ortak anahtarla bir örnek başlatmak. Öyleyse zor olan bölümün ortak anahtarını almanız gerekiyor.
Eric Hammond

1
Vaov! Genel anahtarı almak için çok fazla iş var. Amazon'un "Genel anahtarı ver" seçeneğini belirtmesi daha kolay olurdu.
Jus 12

37

Ancak doğru ssh-keygen komutu şudur:

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

Bu, bir önceki cevap üzerine bir yorum veya önerilen düzenleme olmalıdır. Yine de haklısın.
JCotton

Haklısın bu bir yorum olmalıydı. Ne yazık ki, henüz yorum yapma ayrıcalıklarına sahip olmadım :-(
rsmoorthy

haha, iyi gidiyorsun. Düzeltmeyi yaptığınız için teşekkürler.
JCotton

Bu cevap, özel anahtara erişimi olsaydı işe yarardı, ancak asıl soruda, özel anahtara farklı bir konumdaydı ve erişilebilir değildi.
Eric Hammond

1
chmod 400 your_private_key.pem"İzinler çok açık bir hata" alıyorsanız çalıştırın
crizCraig

7

Ssh public anahtarına ulaşmak için EBS birimlerini kullanan bir yanıt verdim, ancak işte ortak anahtarı konsol çıktısına gönderen bir kullanıcı-veri betiği ile geçici bir EC2 örneği başlatarak buna ulaşmanın başka bir yolu. İşte adımlar:

Aşağıdaki kodu output-ssh-key.userdatayerel bilgisayarınızda adlandırılmış bir dosyaya kaydedin. BU KOMUTANLIĞI KELİME ÇALIŞTIRMAYIN!

#!/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

Bir kullanıcı veri betiği olarak yukarıdaki dosyayla bir stok Ubuntu 10.04 LTS örneği çalıştırın. Public ssh anahtarını almak istediğiniz anahtar çiftini belirtin:

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

Ortak ssh anahtarınızı gösterene kadar konsol çıktısını istemeye devam edin. Run-örnekleri komutundan döndürülen örnek kimliğini belirtin:

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

2-10 dakika içinde şöyle bir çıktı alırsınız:

========================================================================
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)

Geçici örnek, bir saatten kısa bir süre içinde otomatik olarak sona erer, ancak çalıştırılması gereken iki kuruştan daha fazla borçlandırılmadığınızdan emin olmak istiyorsanız, kendiniz sonlandırabilirsiniz.


Bunu modern bir awscli kurulumuyla denedim ve kullanıcı-veri betiğinizle çalıştı. Ancak komutları biraz uyarlamak zorunda kaldım. Bu, eu-west-1 bölgesi için çalıştı: aws ec2 çalışma örnekleri - anahtar adı mykey - instance tipi t1.micro - instance başlatıldı kapatma davranışı sonlandırıldı ssh-key.userdata - image-id ami-c1167eb8; aws ec2 konsoldan çıktı almak - instance-id i-0ce56c0e02086160d; aws ec2 terminate-eşgörünüm - instance-id i-0ce56c0e02086160d
holmb

(Düzenlendi) Tamam biçimlendirme burada korkunç, farklı cevap olarak göndereceğim.
Bernhard

5

Özel SSH anahtarınız varsa, aşağıdaki ssh-keygen komutunu çalıştırarak genel anahtar bileşenini yeniden oluşturabilirsiniz :

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

Bu kadar basit kısmı ... AWS konsolu ve API, bir EC2 örneğini başlatırken 2 tuş takımı itmeyi desteklemiyor. Bu, sistem yöneticisinin başka yollarla yapması gereken bir egzersizdir.

Önceden yetkilendirilmiş kimlik anahtarına erişiminiz varsa, sadece aşağıdaki ssh-copy-id komutunu uygulayabilirsiniz :

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

Bu, verilen genel anahtarı sunucuya ve ~user/.ssh/authorized_keysdosyaya sizin için otomatik olarak kopyalar ve dosya üzerinde uygun izinleri sağlar.

En şık yöntem konfigürasyon yönetimi süreçlerinize ek kimlik anahtarları eklemektir. Benim durumumda bu , düğüm için Kukla yapılandırmasına ek anahtarlar eklemeyi gerektirir .

Bir yan not olarak, kişisel tercih, ancak iş ve ev konumu için ayrı anahtarlar içermekten ziyade daha iyi bir SSH anahtar yönetimi yöntemini kullanırdı. Bir önceki soruda bahsettiğim gibi, anahtarlarımı kullandığım herhangi bir bilgisayardan ziyade yanımda bulundurduğum bir USB sürücüsünde tutuyorum.


0

Başka bir seçenek de user_data içinde root'a başka bir ssh anahtarı ekleyen kısa bir script eklemek olacaktır:

#!/bin/bash

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

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

Daha sonra makineye root olarak giriş yapabilir ssh -l root -i <KEYFILE> URLve sadece ec2_user, ubuntu kullanıcısının yetkili anahtarlarından veya anahtarın anahtarından okuyabilirsiniz.

Tek şey - makineyi genel olarak erişilebilir hale getirmeniz ve 22 numaralı limana erişimin dışarıdan mümkün olduğundan emin olmanız gerekiyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.