SSH bilinen_hosts dosyasına güvenli bir şekilde bir ana bilgisayar (örn. GitHub) ekleyin


20

Bir ana bilgisayar anahtarını SSH known_hostsdosyasına nasıl güvenli bir şekilde ekleyebilirim ?

Bir geliştirme makinesi kuruyorum ve (örneğin) gitbir deponun github.comSSH kullanmasını klonladığımda sormasını engellemek istiyorum .

Kullanabileceğimi biliyorum StrictHostKeyChecking=no(örneğin bu cevap ), ama bu güvenli değil.

Şimdiye kadar buldum ...

  1. GitHub SSH anahtar parmak izlerini https://help.github.com/articles/github-s-ssh-key-fingerprints/ adresinde yayınlar.

  2. İçin ssh-keyscanana bilgisayar anahtarını almak için kullanabilirsiniz github.com.

Bu gerçekleri nasıl birleştirebilirim? Önceden doldurulmuş bir parmak izi listesi verildiğinde, çıktısının dosyaya ssh-keyscaneklenebileceğini nasıl doğrularım known_hosts?


Sanırım aşağıdakileri soruyorum:

Döndürülen bir anahtarın parmak izini nasıl alırım ssh-keyscan?

SSH için zaten MITM-ed olduğumu, ancak GitHub HTTPS sayfasına güvenebileceğimi varsayalım (geçerli bir sertifika zinciri olduğundan).

Bu, bazı (şüpheli) SSH ana bilgisayar anahtarları (from ssh-keyscan) ve bazı (güvenilir) anahtar parmak izlerim olduğu anlamına gelir. Birini diğerine karşı nasıl doğrularım?


İlgili: Çıktının ana bilgisayar bölümünü nasıl karma hale getiririm ssh-keyscan? Veya karma / unhashed ana bilgisayarlarını karıştırabilir miyim known_hosts?


Kullanım durumunuz için neden güvenli olmasın?
quadruplebucky

StrictHostKeyChecking=noMITM'ye karşı savunmasızdır. Mı ssh-keyscangüvenli karşı MITM?
Roger Lipscombe

Neden kod yazmak için yeterince güvendiğim biriyle hiç tanışmadığım bir yabancıyı taklit eden biri hakkında aşırı endişelendiğimi anlayamıyorum İndirmek ve çalıştırmak üzereyim ...
quadruplebucky

1
Çünkü bu benim github üzerinde özel bir repo kaynak kodu ve ben kaydedilmesini aktarırken zararlı değişiklikleri tanıtan bir MITM (örneğin) istemiyoruz. Bu sadece bir örnek.
Roger Lipscombe

Ben (iyi ya da kötü için) github'a güvenmeyi seçiyorum. Ben ve onlar arasındaki her rastgele ağ bağlantısına güvenmeyi seçmiyorum.
Roger Lipscombe

Yanıtlar:


12

known_hostsDosyaya "güvenli" bir anahtar eklemenin en önemli kısmı , anahtar parmak izini sunucu yöneticisinden almaktır. Anahtar parmak izi şöyle görünmelidir:

2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

GitHub durumunda, normalde doğrudan bir yöneticiyle konuşamayız. Ancak, anahtarı web sayfalarına koydular, böylece bilgileri oradan kurtarabiliriz.

Manuel anahtar kurulumu

1) Anahtarın bir kopyasını sunucudan alın ve parmak izini alın. Not: Parmak izini kontrol etmeden önce bunu yapın .

$ ssh-keyscan -t rsa github.com | tee github-key-temp | ssh-keygen -lf -
# github.com:22 SSH-2.0-babeld-f3847d63
2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

2) Anahtar parmak izinin bir kopyasını sunucu yöneticisinden alın - bu durumda github.com'daki bilgileri içeren sayfaya gidin

  1. Github.com adresine gidin
  2. Git yardım sayfası (giriş yapmış ise sağdaki menüde; ana sayfasının altındaki aksi de).
  3. In Başlarken bölümüne gidin SSH ile GitHub'dan bağlanma
  4. SSH bağlantınızı test etme sayfasına gidin
  5. SHA256 parmak izini daha sonra kullanmak üzere o sayfadan metin düzenleyicinize kopyalayın.

3) İki kaynaktan gelen anahtarları karşılaştırın

Bir metin düzenleyicide doğrudan üst üste yerleştirerek, bir şeyin değişip değişmediğini görmek kolaydır

2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA) #key recovered from github website
2048 SHA256:nThbg6kXUpJ3Gl7E1InsaspRomtxdcArLviKaEsTGY8 github.com (RSA) #key recovered with keyscan

(İkinci anahtarın manipüle edildiğini, ancak orijinaline oldukça benzediğini unutmayın - böyle bir şey olursa ciddi bir saldırı altındasınız ve güvenilir bir güvenlik uzmanıyla görüşmelisiniz.)

Anahtarlar farklıysa prosedürü iptal edin ve bir güvenlik uzmanıyla iletişim kurun

4) Anahtarlar doğru bir şekilde karşılaştırılırsa, önceden indirdiğiniz anahtarı yüklemelisiniz

cat github-key-temp >> ~/.ssh/known_hosts

Veya bir sistemdeki tüm kullanıcılar için (root olarak) yüklemek için:

cat github-key-temp >> /etc/ssh/ssh_known_hosts

Otomatik anahtar kurulumu

Bir oluşturma işlemi sırasında bir anahtar eklemeniz gerekiyorsa, yukarıdaki manuel işlemin 1-3 adımlarını izlemelisiniz.

Bunu yaptıktan sonra github-key-tempdosyanızın içeriğini inceleyin ve bu içerikleri bilinen hosts dosyanıza eklemek için bir komut dosyası oluşturun.

if ! grep github.com ~/.ssh/known_hosts > /dev/null
then
     echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" >> ~/.ssh/known_hosts
fi

Artık gerektiğini kurtulmak herhangi sshkomutların StrictHostKeyCheckingdevre dışı.


18

Bilinen_hosts dosyanızdaki karma / unhashed girdilerini karıştırabilirsiniz.

Eğer github anahtarı eklemek istiyorsanız, şunları yapabilirsiniz:

ssh-keyscan github.com >> ~/.ssh/known_hosts

Karma olmasını istiyorsanız, -H ekleyin

ssh-keyscan -H github.com >> ~/.ssh/known_hosts


1
Hashed / unhashed arasındaki fark nedir? Karmalamanın ne olduğunu biliyorum, sadece bu bağlamda neden uygulandığını değil.
Glen Thomas

3
Girişlerinizi karma yapmak, bağlanmak için kullandığınız ana makineler hakkındaki bilgileri gizlemenize olanak tanır. Kabul edilen yanıtı security.stackexchange.com/questions/56268/…
Wee

4
Bu soruya cevap vermiyor. Ssh-keyscan kullanmak orta atakta bir adama tabidir, bu da sakladığınız anahtarın sisteminize girmeye çalışan saldırgana ait bir anahtar olabileceği anlamına gelir. Bir şeyleri kontrol etmenin bir yolu için lütfen cevabıma bakın.
Michael

Av. Her zaman yanlış olan cevaplara dikkat çekmek - "en iyi iki cevap aslında güvensizdir"
Peter Mortensen

6

En kolay yol tuşları kullanarak manuel olarak getirmektir, ssh-keyscanmanuel olarak doğrulamaktır:

$ ssh-keyscan -t rsa github.com | ssh-keygen -lf -
# github.com:22 SSH-2.0-libssh-0.7.0
2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

Ve bunları daha sonra "yetkili" ortak anahtarı taşıyacak olan betiğinize ekleyin.


Dediğin gibi anahtarlarım var, 'bunları senaryomuma nasıl eklerim?
Glen Thomas

Ayrı bir dosya olarak veya komut dosyanızda bir dize olarak.
Jakuje

Bu cevap tehlikelidir çünkü “onları manuel olarak doğrula” içinde saklanmak oldukça zor bir süreçtir. Aşağıya, bunun nasıl yapılacağını açıklamayı ve sonuçları güvenli bir şekilde kullanmayı amaçlayan bir cevap ekledim.
Michael

Av. Her zaman yanlış olan cevaplara dikkat çekmek - "en iyi iki cevap aslında güvensizdir"
Peter Mortensen

1
@RogerLipscombe Cevabın güvenli bir şekilde yorumlanabileceğini kabul ediyorum. Buradaki risk, birisinin bunu anlayamayabileceği ve örneğin, sunucuya giriş yaptıktan sonra anahtarı kontrol etmek gibi güvenli olmayan şeyleri deneyebilmesidir. Bu yüzden bu cevabı "tehlikeli" ve diğerine "güvensiz" olarak adlandırdım - manuel olarak nasıl kontrol edeceğinizin detayı önemlidir. Kabul için teşekkürler.
Michael
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.