Jawab ya dalam skrip bash

24

Saya mencoba melakukan git clonepalung skrip bash, tetapi pertama kali saya menjalankan skrip dan server belum diketahui skrip gagal. Saya punya sesuatu seperti ini:

yes | git clone git@github.com:repo/repoo.git
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? 

Tapi itu mengabaikan yes. Apakah Anda tahu cara memaksa git cloneuntuk menambahkan kunci ke host yang dikenal?

Rafael
sumber
Bagaimana dengan echo yes | git clone [email protected]:repo/repoo.git?
asfallows
3
@asfallows, @Rafael: echo yesbukan pendekatan yang baik: kedua kalinya Anda menjalankan perintah, ssh tidak akan bertanya apakah Anda ingin melanjutkan karena kunci server sudah diketahui.
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

21

Tambahkan yang berikut ke ~/.ssh/configfile Anda :

Host github.com
    StrictHostKeyChecking no

Apa pun yang menggunakan klien open-ssh untuk membuat shell jarak jauh (dengan klien git melakukannya) harus melewati pemeriksaan kunci ke github.com.

Ini sebenarnya ide yang buruk karena segala bentuk melewatkan cek (apakah Anda secara otomatis menekan ya atau melewatkan cek di tempat pertama) menciptakan ruang bagi seorang pria dalam kompromi keamanan menengah. Cara yang lebih baik adalah dengan mengambil dan memvalidasi sidik jari dan menyimpannya dalam known_hostsfile sebelum perlu menjalankan beberapa skrip yang secara otomatis terhubung.

Caleb
sumber
2
Dengan preferensi yang kuat untuk mengambil dan memvalidasi sidik jari dan menyimpannya dalam known_hostsfile sebelumnya .
Gilles 'SANGAT berhenti menjadi jahat'
1
Terima kasih banyak atas jawaban Anda, saya akhirnya mengikuti pendekatan menambahkan sidik jari di known_hosts. Ini seperti lebih aman :)
Rafael
Oh saya menggunakan boneka untuk melakukan ini. Jika seseorang tertarik untuk menggunakannya di sini adalah resepnya: gist.github.com/1155725
Rafael
5

yesoutput y. Kebutuhan penerimaan kunci RSA yes. Anda bisa mencoba yes yes | git clone [email protected]:repo/repoo.gitjadi bukan yeskeluaran .yesy

jfg956
sumber
5
Untuk beberapa alasan, itu tidak berhasil untuk git clone, untukku.
Matt V.
Tidak ada yang berhasil untuk saya. Juga echo "yes" | ...tidak. Saya pikir gittidak menerima perpipaan. Mungkin hanya dalam beberapa versi?
udondan
3

Menjalankan ssh-keyscan -H github.com >> ~/.ssh/known_hostssebelum kloning akan menambah kunci dan mencegah muncul prompt.

Tentu saja pendekatan ini juga rentan terhadap serangan MITM.

Kevin Smyth
sumber
1

Saya pernah mengalami masalah ini sebelumnya. Meskipun itu pada mesin Windows tapi kami harus menggunakan ssh untuk terhubung ke host jarak jauh. Kami mengalami masalah yang sama dengan koneksi pertama yang selalu gagal karena tidak mengenali kunci.

Saya menyelesaikannya dengan menghubungkan secara manual dan menemukan kunci registri dan mengimpornya di awal skrip. Di Linux seharusnya ide yang sama: Anda ingin menambahkan server ini ke daftar host tepercaya sehingga ssh tidak akan bertanya apakah Anda memercayainya setiap saat.

Setelah Anda terhubung secara manual, cari file kunci dan tambahkan ke file known_hosts Anda. Dengan cara ini ssh akan memeriksa file itu, menganggap Anda tahu apa yang Anda lakukan dan melanjutkan tanpa bertanya tentang sidik jari.

n0pe
sumber