Soru Etkileşimli olmayan git klonu (ssh parmak izi istemi) [çift]


Bu sorunun zaten bir cevabı var:

Bir repoyu etkileşimli olmayan bir şekilde klonlamak istiyorum. Klonlamada, konakın parmak izini doğrulamak için git sorar:

The authenticity of host 'bitbucket.org (207.223.240.182)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)? no

Bu sorular her ortaya çıktığında nasıl "evet" i zorlayacağım? Kullanmayı denedim yes yes | git clone ...ama işe yaramıyor.

DÜZENLE: İşte bir çözüm: Known_hosts'a otomatik olarak yeni bir ana bilgisayar ekleyebilir miyim? (ssh-keyscan ile bilinen_hosts için entires ekler).


108
2017-11-09 09:04


Menşei


İki yıl sonra bile bu sorunun doğru bir cevabı olmadığını görmek ilginç. Git'in sorulacağı birkaç durum daha vardır, örneğin http üzerinde kopyalamaya çalışırsanız ve sunucu basic_auth için soruyorsa. Bu etkileşim dışı modda nasıl yapılır? - sorin
Ekleme -q seçeneği (sessiz) benim için yaptı. Şimdi şifreyi otomatikleştiriyorum.


Cevaplar:


Bunun en iyi çözüm olduğunu sanmıyorum, ama benim için bir çözümdü.

CEVAP:

Alan adları known_hosts kullanarak dosya ssh-keyscan komut sorunu çözdü:

ssh-keyscan <enter_domainname_e.g._github.com> >> ~/.ssh/known_hosts


92
2017-11-02 04:13



Lütfen böyle yapma. Bu tamamen güvenli değil: parmak izleri sizi rahatsız etmek için değil, ortadaki adam saldırısı ile karşılaşmadığınızdan emin olmak için burada değil. Lütfen cevabımı aşağıya bakın. - autra
Dediğim gibi, "Bunun en iyi çözüm olduğunu sanmıyorum, ama benim için bir çözümdü." çünkü acelem vardı, elbette bunu yapmak için "polikatal doğru yol" var ((: - kroe
Bu politik olarak doğru bir soru değil. :-) Güvenli olup olmadığı sorusu. Çözümünüz, sadece ve sonra parmak izinizi el ile kontrol ederseniz güvenlidir. ssh-keyscan ve eklemeden önce .ssh/known_hosts Bir github kendi web sitesinde yayınladığı ile aynı olmak. Bunu birkaç şekilde yapabilirsiniz ve benimkilerden biri benimdir. Senaryonuzda da eşit bir kontrol yapabilirsin, ama sonunda her şey buna geliyor: Sen hangi parmak izinin beklediğini öğrenmek için senaryona ihtiyacın var ve eğer doğru olanı almazsa başarısızlığa ihtiyacın var. - autra
mevcut değilse SADECE anahtar eklemek için ssh-keygen -F github.com || ssh-keyscan github.com >>~/.ssh/known_hosts - transang
Bunu bir kez bir yapılandırma yönetiminin veya bir sağlama çalışmasının parçası olarak yapmak iyi olmalıdır. Parmak izinin gelecekte değişmesi durumunda, ssh amaçlandığı şekilde çalışacaktır ve sertifikanın değişmediğini ve 0 çıkış kodunun geri döndüğünü bildirecektir. Bu, ssh veya git'i kullandığınız komut dosyalarını durdurması muhtemeldir. - emhohensee


Ne "StrictHostKeyChecking no" ne de "ssh-keyscan" seçenekleri güvenli değildir. sen gerek ssh ile sopa eğer MiTM saldırı önlemek için bir noktada bir parmak izi doğrulama.

Aslında 2 seçeneğiniz var:

Git yerine https protokolünü kullan

Bir parmak izi istemez, çünkü ssh dahil değildir, bunun yerine https kullanılır. Güvenlik açısından, işletim sisteminize kök sertifika yüklemelerine güveniyorsunuz. Minimalist bir resim veya Docker kullanıyorsanız, ca-sertifika paketini yüklemeniz gerekebilir.

Eğer gerçekten git + ssh protokolü istiyorsanız

Anahtarı çalışma zamanında eklemeniz gerekiyor mu? Parmak izi kontrol etmediğiniz ve sizi MiTM saldırılarına açık bıraktığınız için bu güvenli değildir. Bu sadece teorik değildir ve çalıştığı kanıtlanmıştır.

Komut dosyanızı çalıştırmadan önce, anahtarı github'dan (yerel makinenizde) alın:

ssh-keyscan github.com >> githubKey

Parmak izi oluşturun:

ssh-keygen -lf githubKey

Ve kontrol et el ile listelenenlere karşı bu sayfada (Tamam, orada size orijinal github web sitesini getirmek için https sertifikalarına ve OpenSSL'e güveniyorsunuz, ancak hala bir açık anahtarı kabul etmekten çok daha iyi.).

Ardından, komut dosyasına ekleyerek kodu içine koyarsınız:

echo '<copy paste the content of 'cat githubKey' on your machine>'  >> ~/.ssh/known_hosts

git klonundan önce.

GitHub genel anahtarı, yalnızca tehlikeye düştüğüne inanırsa (veya yeterince güvenli değilse) değişecektir. Eğer durum böyle olsaydı, sen istemek betiğin yine de başarısız olacak.


80
2018-06-25 15:39



Bu soruya tek doğru ve güvenli cevaptır. Neden sonuncu? Ben insanlıktan utanıyorum; - Jan Warchoł
Maalesef iki faktörlü bir yetki kullanıyorsanız, GitHub ile etkileşimli olmayan HTTPS'leri yapamazsınız. - Brett Widmeier
Ben neden görmüyorum. Burada bir kamu repodan bahsediyoruz, kimlik doğrulamasına gerek yok. Bir komut dosyasından özel bir repo klonlamak tamamen başka bir şeydir: betiğinizin yapılmasına izin vermeniz gerekir. - autra
"El ile" parmak izinin kontrol edilmesi, modern kaşiflerdeki "arama çubuğu" nun yardımıyla, kulağa daha az ağrıyor. Krom). - Franklin Yu


Burada daha iyi bir seçeneğin yedeklemeniz ve boşaltmanız gerektiğine inanıyorum. ~/.ssh/known_hosts dosya, el ile SSH bağlantısını yapın, IP adresini ve parmak izini doğrulayın, mv ~/.ssh/known_hosts ~/bitbucket_hostssonra içeriğini kullanın ~/bitbucket_hostsbetiğinizde bilinen parmak izlerini bilinen_hosts dosyasına otomatik olarak eklemek için (orijinali geri yüklemeyi unutmayın) ~/.ssh/known_hosts).

Bu adımın yalnızca bir kez gerçekleştirilmesi gerekir (herhangi bir makinede, inanıyorum) ve parmak izlerine sahip olduğunuzda, bunu otomasyon komut dosyasına dahil edebilirsiniz.


7
2018-04-07 18:53





Böyle bir süreci otomatikleştirmek istediğinizi kesinlikle anladığım halde, bunu yapmak kötü bir davranış olacaktır. SSH ve ilgili ağ oluşturma alt bileşenlerinin, güvenli bir protokol kullanırken kullanmama nedeni, bir insanın genel anahtarının bilinmediği bir HATIRLATMAKTIR. Bu kasıtlı - kullanıcının ana makineyi beklediği sistemi açıkça bilgilendirmesi gerekiyor. Sizi ya da SSH ya da TLS / SSL güvenliği kapsamında sunulan her açık anahtarı otomatik olarak kabul etmek istemezsiniz. Bir örnek, bir proxy yazılımının beklediğiniz bir ana bilgisayarın yerine kendi anahtarını sunduğu zamanki gibi bir ortadaki adam saldırısıdır.

Dikkatle ilerle.

Kodun teli kaynağından korkmamanız durumunda, klonlama yaparken açıkça ve münhasıran git: // protokolünü kullanmanız gerekir - kimlik doğrulaması olmayan ve açık metinde.


6
2018-01-22 22:34



Etkileşimli olmayan kullanımları zorunlu tutmamız gereken kullanım durumlarını kesinlikle görebilirim. git clone... ve bu, herhangi bir çekmeyi kabul etmemiz gerektiği anlamına gelmez (özellikle parmak izi). Benim durumumda, böyle bir şeyde otomatik olarak başarısız olmaktan çok memnun olurum. - vaab


Jeff Hall'un dediği gibi, bunu yapmak, ortada olmayan adam saldırılarına izin verdiği için tehlikeli. Ancak, StrictHostKeyChecking no ana bilgisayar anahtarlarını denetlemeyi devre dışı bırakmak için ssh seçeneğine basın. Ancak, ben olsaydım bu seçeneğe çok dikkat ederdim.


5
2018-02-03 07:45



Aynı zamanda ortadaki adam hakkı sağlar? - autra


Anahtarı eklemek .ssh/known_hosts Yapılması gereken doğru şey gibi görünüyor.

Görevi otomatikleştirdiğinizde, anahtarın zaten içerilmediğinden ve her birinde eklendiğinden emin olmak istediğinizde clone/pull görevler.

Bu snippet, henüz bulunamadıysa parmak izini ekler:

if [ ! -n "$(grep "^bitbucket.org " ~/.ssh/known_hosts)" ]; then ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null; fi

4
2018-02-16 10:42



Bu mükemmeldi. Kolayca bir dağıtım komut dosyasına konabilir ve ana bilgisayar doğrulamasını devre dışı bırakmaktan daha güvenlidir. İşte github için bir tek liner: if [ ! -n "$(grep "^github.com " ~/.ssh/known_hosts)" ]; then ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null; fi; ssh-agent bash -c "ssh-add /path/to/your/deploy/id_rsa; git clone -b master git@github.com:githubAccount/githubRepo.git /your/target/dir - tweak2
Bu, çalışmaz HashKnownHosts içinde etkin / Etc / SSH / ssh_config (veya ~ / .Ssh / yapılandırma). Yerine [ ! -n "$(grep "^bitbucket.org " ~/.ssh/known_hosts)" ] kullanmak daha iyi olurdu [ ! "$(ssh-keygen -F bitbucket.org)" ], hem karma hem de karma olmayan satırları bulur. known_hosts. - Claus Conrad