SSS Anahtarlarını Yetkili_ Anahtar Dosyasına Nasıl Eklerim?


185

Amazon EC2'de geliştirme için kullandığım bir Ubuntu sunucum var ve bugün dosyamdaki her şeyi aptalca bir şekilde temizledim ~/.ssh/authorized_keys. Neyse ki açık bir SSH'im var, bu yüzden hala bağlıyım ve dosyayı düzeltebilirim, ancak anahtar dosyamı geri koymaya çalıştığımda çalışmıyor. Yerel makinemdeki sunucudan hala izin verilmedi.

authorized_keys600 izinlerine sahiptir. SSH anahtarımı ssh-rsa ile eklemeyi ve ssh-rsa'yı bırakmayı denedim. Ayrıca SSH anahtarını tek bir satırda tutmayı da denedim ama bu da işe yaramadı.

Dosyayı tekrar yüklemek gibi yapmak zorunda olduğum başka bir şey var mı?


3
Yıllar sonra, bu hala geçerli ve aktif görünüyor; sadece bir gözlem yapmak istedim, bir kurşundan mahrum kaldığı hakkında konuşmak: "Neyse ki bir SSH açtım, bu yüzden hala bağlıyım [..]" - sheesh! ; dP
Nostromov

1
Doğum günümde düzenlenen bu yazı, iki ay önce doğum günümde beni kurtardı.
ytpillai

Yanıtlar:


198

Sen gerektiğini asla içeriği ile başlayan dosyayı kaydetmek -----BEGIN RSA PRIVATE KEY-----sunucuda, bu senin olduğu özel anahtar. Bunun yerine, genel anahtarı ~/.ssh/authorized_keysdosyaya koymanız gerekir .

Bu ortak anahtar, .pubkullanılarak oluşturulan ssh-keygenve içeriği ile başlayan uzantıya sahiptir ssh-rsa AAAAB3. (İkili format bu sorunun cevaplarında açıklanmıştır ).

~/.sshSunucudaki izinler 700 olmalıdır. ~/.ssh/authorized_keys(Sunucudaki) dosyanın 600 moduna sahip olması gerekir. İstemci tarafındaki (özel) anahtarın izinleri 600 olmalıdır.

Özel anahtar bir şifre ile korunmuyorsa ve sunucuya koyarsanız, yeni bir tane oluşturmanızı öneririm:

ssh-keygen -t rsa

Silinen özel anahtarı sunucudan kimsenin kurtaramayacağından tamamen eminseniz bunu atlayabilirsiniz.

Bu sshişe yaramazsa, daha fazla ayrıntı için seçeneklerle çalıştırın :

ssh -vvv user@example.com

Sunucu tarafında, /var/log/auth.logayrıntılar için inceleyebilirsiniz.


1
Amazon EC2 sunucuları ile tüm elde ettiğim özel anahtar (key.pem). Hiçbir yerde ortak anahtarım yok.
Dave Long,

3
@Dave Long: ssh-keygen -t rsaYeni oluşturulan id_rsa.pubdosyayı kullanarak yeni bir anahtar oluşturmanız ve ~/.ssh/authorized_keyssunucunuza yerleştirmeniz gerekir. Ayrıca bakınız docs.amazonwebservices.com/AWSEC2/latest/UserGuide/…
Lekensteyn

15
@DaveLong: Açık anahtarı, istediğiniz zaman özel anahtardan oluşturabilirsiniz. Bunu sadece aşağıdaki komutu kullanarak yapabilirsiniz: ssh-keygen -y -f key.pem > key.pub
Morgan Blackthorne

5
@ Morgan Blackthorne Bu doğru olsa da, uzak anahtarlardan birini kabul etmek yerine özel anahtarlarınızı oluşturmanızı tavsiye ederim. Özel anahtarın sızdırılmadığından tam olarak emin olamazsınız.
Lekensteyn

2
@ Gerrat Sabit².
Lekensteyn

175

Genel anahtarınızı uzaktaki makineye takmanın alternatif bir yolu authorized_keys:

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Bazı avantajlar:

  • ssh-copy-idyüklü olması gerekmez .

  • garantiler mkdireklemek denemeden önce çalışır id_rsa.pubiçin authorized_keys.


10
Cevabınız ek paketler olmadan bunu birden fazla uzak makinede yapmama yardımcı oldu, teşekkür ederim.
nol

Bu, "~ / .ssh" dizininin ve "~ / .ssh / approved_keys" dosyasının doğru izinlerle oluşturulacağını garanti etmez.
Nick

1
@ Nick, bu problemi yaşadım. Öyleyse belki önce kişi gerçekten varlığını kontrol etmek zorundadır, eğer eksikler chmod ile düzgün bir şekilde yaratırsa (700 / klasör, 600 / dosya) ve sadece sonra ekle? Öyleyse belki bir tek astar olamaz?
AnneTheAgile

7
@AnneTheAgile @MariusButuc mkdir -p ~/.sshtarafından verilen cevabın kısmını değiştirerek umask 077 && mkdir -p ~/.sshdüzgün çalışmasını sağlamak için yapmanız gereken tek şey olduğunu düşünüyorum.
Nick

1
@Nick! Bir deneyeceğim.
AnneTheAgile,

128

Giriş tabanlı kimlik doğrulamanız varsa ssh-copy-id, ortak anahtarlarınızı uzak sunucuya eklemek için kullanın.

ssh-copy-id user@host

1
Bu, istemci makinemin ne olduğu Mac'te geçerli bir komut gibi görünmüyor.
Dave Long


13
OSX üzerinde demlemek ile yükleyebilirsiniz:brew install ssh-copy-id
phil

Macport'ta, bu komut kullanılarak yüklenebilir sudo port install openssh +ssh_copy_id. +ssh_copy_idSsh_copy_id varyantı ile OpenSSH'yi yükler.
Stefan Lasiewski

6
Phildawson.tumblr.com adresindeki talimatların, güvenilmeyen yazılımı, root olarak yüklemenizi istediğini unutmayın. Bu oldukça tehlikelidir ve yazarın güvenebileceğini bilmiyorsan saldırıya uğramak için iyi bir yoldur.
Stefan Lasiewski

38
local> scp .ssh/id_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit

16

En kolay yol kopyalayıp yapıştırmak ...

Önce id_rsa.pub, başlangıçtaki "ssh-rsa" da dahil olmak üzere yerel açık anahtarınızın içeriğini e-posta adresinizle bitinceye kadar görüntüleyin / kopyalayın :

cat ~/.ssh/id_rsa.pub

Ardından authorized_keyssunucuda düzenleyin ve panonuzun içeriğini o dosyadaki diğer tuşların altına yapıştırın:

nano ~/.ssh/authorized_keys

Ve kaydedin Ctl+O, dosyadan Ctl+Xçıkın, SSH oturumundan çıkın exitve çalıştığını onaylamak için tekrar giriş yapmayı deneyin. Bir şifre sormadıysa işe yaradı.


5

Buna özellikle AWS örnekleri ile ilgili olduğu için katkıda bulunabileceğimi düşündüm ve tüm cevaplar sorunu sadece bir donanım parçası gibi Linux olarak ele alıyor. Anlamanız gereken ilk şey, hiçbir zaman, EC2 örneklerine hiçbir zaman donanım gibi davranmamanız gerektiğidir. Bu sadece sizin için daha fazla iş yaratacaktır. Onlara geçici davranın. AWS'li insanların gördüğü en büyük engel bu. Örneğinizin bir AMI'sini oluşturun ve ihtiyacınız olan anahtarı yeni örneğe enjekte edin. cloud-init sizin için halleder. Daha ayrıntılı olarak, tek yapmanız gereken orijinalin AMI'sinden yeni bir örnek oluştururken doğru ortak anahtarı kullanmaktır. Onaylanan cevabın yorumlarında olduğu gibi, kendi anahtar çiftinizi ya da pem dosyalarınızı oluşturmak istiyorsanız AWS size EC2'de kullanım için ortak anahtarlarınızı yükleme seçeneği sunar.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws


3

Genel anahtarı kaydettikten sonra, özel anahtarı bir dizine ve PC'nizdeki dosyaya kaydetmelisiniz. Ve ssh'ın macun üzerindeki auth bölümünde masaüstünüze kaydettiğiniz özel anahtar dosyasına işaret etmelisiniz. Çalışacak. Benim için çalışıyor.


1
Windows konsolu tercümana eklenen tüm ssh işlevselliğini ekleyebilseydi çok isterdim
Dennis

2

Uzaktaki makineye anahtarı koymak istediğiniz bir kabuk alın ve gerekli dosyaları ve dizinleri oluşturmak, izinlerini ayarlamak ve dosyayı dosyaya eklemek için bu tek astarı çalıştırabilirsiniz. Tabii ki KEYGOESHEREaşağıdaki kısmı ve bundan sonraki yorumları değiştirmelisiniz.

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys

1

Burada, bir metin dosyasındaki genel anahtar dosya adlarının bir listesine sahip olabileceğiniz ve büyük genel anahtar dosya grubunun aynı dizinde olduğu bir varyasyon vardır.

Bu varyasyon, içe aktarılacak çok sayıda ortak anahtar listesi veriyorsanız yararlı olabilir :-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
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.