Bir bash betiğinde SSH bilinen ana bilgisayar nasıl eklenir?


13

Bir web uygulamasını dağıtabileceğim yeni bir sunucu sağlamak için bir bash betiği oluşturuyorum. Her zaman yapmak zorunda olduğum bir şey GitHub bilinen bir ana bilgisayar kullanarak olduğu gibi ssh git@github.com. Bu işlemi bir bash betiğinde nasıl otomatikleştirebilir ve idempotent bir şekilde yapabilirim?

Yanıtlar:


17

Gitmenin basit yolu böyle bir şey yapmak olacaktır.

ssh-keyscan remote_server >>~/.ssh/known_hosts

Bu kutu yeni ise, ssh-keyscan komutunu~/.ssh çalıştırmadan önce dizini oluşturmanız gerekebilir .

Ssh-keyscan öğesinin rastgele sayıda ana bilgisayar adı alabileceğini unutmayın. Olabilecek tüm anahtarları alacak.


1
PS - Hazırlık için bash betiği yerine kukla gibi bir şey kullanıyor olmalısınız. Kukla için bu sshkey kaynağı ile kolayca ele alınabilir . Ayrıca bilinen_hosts en-masse serverfault.com/a/416782/984
Zoredache

2
Bu bana iyi geldi, ama kukla ve rakipler için birkaç saat geçirdikten sonra, senaryolara ve akıl sağlığına geri döndüm. Bu araçlar sezgiselse, görünüşe göre sezgim yok. YMMV.
Ron Burk

Bash kullanın. Kukla veya ansible gibi şeylerin farklı versiyonlarında sürekli olarak sorun yaşıyorum. Her zaman bash'a geri dönüyoruz ... Şu anda böyle çalışan 3 şirket ve bash bizim için her zaman güvenilirdir.
Ligemer

4

Yeni anahtarı kabul etmeyi otomatikleştirmeye mi çalışıyorsunuz? Öyleyse, -oStrictHostKeyChecking = no kullanabilirsiniz.
Bunu yapmak çok kötü bir fikir çünkü artık ortadaki adam saldırılarına tamamen açıksınız.

Daha iyi bir seçenek, yalnızca bilinen_hosts dosyasını yönetmek ve yeni sunucular sağladığınızda bu dosyayı yeniden kullanmak olacaktır. Github'a yapıştırın ve github'a sshing yapmadan önce bu dosyayı indirmek için basit bir komut dosyası yazın.

Sıkı ana bilgisayar anahtarı denetimi iyi bir şeydir.


"Bilinen_hosts dosyasını yönet" hakkında ayrıntılı bilgi verebilir misiniz? Sanırım yapmak istediğim şey bu, ama dosyayı görüntülediğimde, içeriği bir çeşit karma / anahtar gibi görünüyordu ve manuel olarak yönetilmesi amaçlanan bir şeye benzemiyordu.
Andrew

2
Yeni bir sunucu sağlayın, elinizdeki gibi github'a manuel olarak ssh. İstendiğinde ana bilgisayar anahtarını kabul edin. Çıkış Yap. ~ / .Ssh / known_hosts dosyasını yeni sağlanan sunucudan başka bir yere kopyalayın (github, web sunucusu, alabildiğiniz sürece önemli değildir). Bir daha sunucuyu sağladığınızda, sshing'den önce dosyayı github'a geri kopyalayın. Dosyayı düzenlemeniz gerekmez.
yoonix

Bu benim cevabımdan daha iyi (daha güvenli). Yine de yoonix'in cevabındaki bir diğer gelişme, 'ssh-keyscan github.com' 'u ayrıştırmak ve döndürülen anahtarı ~ / .ssh / bilinen_hosts içine depolamaktır, böylece güncellemeniz için bir yerde statik bir dosya değildir.
Sirex

Bu da işe yarar, ama daha iyi düşünmezdim. Her seferinde yeni bir ana bilgisayar anahtarı alıyorsanız, potansiyel olarak ortadaki adam saldırısına hazır olursunuz.
yoonix

1
Son açıklamamı açıklığa kavuşturmak için (düzenlemek için çok geç): Bir ana bilgisayarı her sağladığınızda yeni bir ana bilgisayar anahtarı almak işlevsel olarak StrictHostKeyChecking = no ayarından farklı değildir. Her ikisiyle de, her tedarik ettiğinizde hangi anahtarın gönderileceğine körü körüne güveniyorsunuz. Bir MITM saldırısının olası olmadığını düşünüyorsanız, bu iki makaleyi okuyun . Github çok büyük bir hedef olurdu.
yoonix

1

Soruyu anladığımdan emin değilim, ancak bilinen_host istemini yoksaymak veya tamamen önlemek istiyorsanız, bu durumda:

ssh -o StrictHostKeyChecking = hayır

veya diğer öneriler: http://www.joedog.org/2012/07/ssh-disable-known_hosts-prompt/


GitHub ana bilgisayar anahtarını kabul etmenin etkileşimli olmayan bir yolunu istiyorum (çünkü bu bir bash betiğinde olacak).
Andrew

o zaman bu işe yarayacaktır - anahtarı kabul etmeyecek, tamamen görmezden gelecektir. Yoonix'in cevabı daha iyi
Sirex
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.