Pertanyaan Non git clone nonaktif (ssh fingerprint prompt) [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

Saya ingin mengkloning repo dengan cara non-interaktif. Saat kloning, git meminta untuk mengonfirmasi sidik jari host:

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

Bagaimana saya memaksa "ya" setiap kali pertanyaan ini muncul? Saya mencoba menggunakan yes yes | git clone ..., tetapi itu tidak berhasil.

EDIT: Berikut solusinya: Dapatkah saya secara otomatis menambahkan host baru ke known_hosts? (Tambahkan entires ke known_hosts dengan ssh-keyscan).


109
2017-11-09 09:04




Menarik untuk melihat bahwa bahkan setelah dua tahun, pertanyaan ini tidak memiliki jawaban yang tepat. Ada beberapa kasus lain di mana git akan meminta, misalnya jika Anda mencoba untuk mengkloning melalui http dan server meminta basic_auth. Bagaimana melakukan ini dalam mode non-interactice? - sorin
Menambahkan -q pilihan (diam) melakukannya untuk saya. Sekarang saya terjebak mengotomatiskan kata sandi.


Jawaban:


Saya tidak berpikir itu adalah solusi terbaik, tetapi itu adalah solusi bagi saya.

MENJAWAB:

Menambahkan nama domain ke known_hosts file menggunakan ssh-keyscan perintah memecahkan masalah:

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


92
2017-11-02 04:13



Tolong jangan lakukan cara ini. Ini benar-benar TIDAK aman: sidik jari tidak ada di sini untuk mengganggu Anda, tetapi untuk memastikan Anda tidak menghadapi serangan man-in-the-middle. Silakan lihat jawaban saya di bawah ini. - autra
seperti yang saya katakan, "Saya tidak berpikir itu adalah solusi terbaik, tetapi merupakan solusi bagi saya." karena saya terburu-buru, pasti ada "cara yang benar polikatal" untuk melakukannya ((: - kroe
Ini bukan masalah politik yang benar :-) Ini pertanyaan apakah aman atau tidak. Solusi Anda aman jika dan hanya jika Anda memeriksa sidik jari secara manual setelah Anda ssh-keyscan dan sebelum menambahkannya ke .ssh/known_hosts menjadi sama dengan yang diterbitkan oleh github di situs web mereka. Anda dapat melakukannya dengan beberapa cara, dan saya adalah salah satunya. Anda juga dapat melakukan pemeriksaan yang sama dalam skrip Anda, tetapi pada akhirnya semua itu menjadi seperti ini: Anda perlu skrip Anda untuk mengetahui sidik jari mana yang diharapkan, dan Anda memerlukannya untuk gagal jika tidak menerima yang benar. - autra
untuk menambahkan kunci HANYA jika tidak ada ssh-keygen -F github.com || ssh-keyscan github.com >>~/.ssh/known_hosts - transang
Melakukan ini sekali sebagai bagian dari manajemen konfigurasi atau menjalankan provisioning harus baik-baik saja. Jika sidik jari pernah berubah di masa depan, maka ssh akan berfungsi sebagaimana dimaksud dan memperingatkan Anda bahwa sertifikat telah berubah, mengembalikan kode keluar non 0. Ini kemungkinan akan menghentikan skrip mana pun Anda menggunakan ssh atau git. - emhohensee


Tak satu pun dari jawabannya aman. Anda memiliki 2 opsi:

Gunakan protokol https, bukan git

Ini tidak akan meminta Anda untuk sidik jari, karena ssh tidak terlibat, https (duh) digunakan sebagai gantinya. Jika Anda menggunakan gambar minimalis atau Docker, Anda mungkin perlu menginstal paket ca-sertifikat.

Jika Anda benar-benar menginginkan protokol git + ssh

Apakah Anda benar-benar perlu menambahkan kunci saat runtime? Ini benar-benar tidak aman.

Sebelum menjalankan skrip Anda, dapatkan kunci dari github (di komputer lokal Anda):

ssh-keyscan github.com >> githubKey

Hasilkan sidik jari:

ssh-keygen -lf githubKey

Dan periksa secara manual terhadap mereka yang terdaftar di halaman ini (ok, di sana Anda mempercayai sertifikat https dan OpenSSL untuk menghadirkan situs web github asli, tetapi masih jauh lebih baik daripada menerima kunci publik secara membabi buta).

Kemudian, Anda harcode di skrip Anda dengan menambahkan di dalamnya:

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

sebelum klon git.

Kunci publik GitHub hanya akan berubah jika mereka yakin itu dikompromikan (atau tidak cukup aman). Jika ini terjadi, Anda ingin naskah Anda gagal juga.


79
2018-06-25 15:39



Ini adalah satu-satunya jawaban yang benar dan aman untuk pertanyaan itu. Kenapa yang terakhir? Saya malu umat manusia ;-( - Jan Warchoł
Anda tidak dapat melakukan HTTPS non-interaktif dengan GitHub jika Anda menggunakan autentikasi dua faktor, sayangnya. - Brett Widmeier
Saya tidak mengerti mengapa tidak. Kami berbicara tentang repo umum di sini, tidak perlu untuk otentikasi. Mengkloning repo pribadi dari skrip adalah hal lain sepenuhnya: Anda perlu mengotorisasi skrip Anda untuk melakukannya. - autra
Memeriksa sidik jari "secara manual" kurang menyakitkan daripada kedengarannya, dengan bantuan "kotak pencarian" di penjelajah modern (seperti di Chrome). - Franklin Yu


Saya percaya opsi yang lebih baik di sini adalah untuk membuat cadangan dan mengosongkan Anda ~/.ssh/known_hosts file, secara manual melakukan koneksi SSH, memverifikasi alamat IP dan sidik jari, mv ~/.ssh/known_hosts ~/bitbucket_hosts, kemudian gunakan isi ~/bitbucket_hostsdi skrip Anda untuk secara otomatis menambahkan sidik jari yang dikenal ke file known_hosts (jangan lupa untuk mengembalikan yang asli ~/.ssh/known_hosts).

Langkah ini hanya perlu dilakukan sekali (pada mesin apa pun, saya yakin), dan setelah Anda memiliki sidik jari, Anda dapat memasukkannya ke skrip otomatisasi Anda.


7
2018-04-07 18:53





Sementara saya mengerti bahwa Anda ingin mengotomatiskan proses seperti itu, hal itu akan menjadi tidak bijaksana. Alasan mengapa SSH dan subkomponen jaringan terkait balk ketika menggunakan protokol aman adalah untuk MENGATAKAN manusia bahwa kunci publik sistem tidak diketahui. Ini disengaja - pengguna perlu secara eksplisit menginformasikan sistem yang diharapkan tuan rumah. Anda tidak ingin otomatis menerima setiap kunci publik yang disajikan kepada Anda atau bagian dari keamanan di SSH atau TLS / SSL dapat dikompromikan. Salah satu contohnya adalah melalui serangan man-in-the-middle seperti ketika perangkat lunak proxy menyajikan kunci itu sendiri di tempat host yang Anda harapkan.

Lanjutkan dengan hati hati.

Jika Anda tidak takut tentang sumber kode di kawat, Anda harus secara eksplisit dan eksklusif menggunakan protokol git: // ketika kloning - itu otentikasi dan dalam teks yang jelas.


6
2018-01-22 22:34



Saya dapat secara definitif melihat kasus penggunaan di mana kita perlu menerapkan penggunaan non-interaktif git clone... dan itu tidak berarti kita harus menerima cek apa pun (khususnya sidik jari). Dalam kasus saya, saya akan dengan senang hati gagal secara otomatis pada hal semacam itu. - vaab


Seperti yang Jeff Hall katakan, melakukan hal itu berbahaya karena memungkinkan serangan man-in-the-middle yang tidak terdeteksi. Namun, Anda bisa menggunakan StrictHostKeyChecking no opsi di ssh untuk menonaktifkan memeriksa kunci host. Namun, saya akan sangat berhati-hati dengan pilihan itu jika saya adalah Anda.


5
2018-02-03 07:45



Ini juga memungkinkan man-in-the-middle right? - autra


Menambahkan kunci ke .ssh/known_hosts tampaknya menjadi hal yang benar untuk dilakukan.

Padahal ketika Anda mengotomatiskan tugas Anda ingin memastikan kunci tersebut belum terkandung dan ditambahkan pada masing-masing clone/pull tugas.

Cuplikan ini hanya akan menambahkan sidik jari jika belum ditemukan:

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



Ini sempurna. Dapat dengan mudah dimasukkan ke dalam skrip penerapan dan lebih aman daripada menonaktifkan verifikasi host. Berikut adalah satu baris untuk github: 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
Ini tidak berfungsi kapan HashKnownHosts diaktifkan di / etc / ssh / ssh_config (atau ~ / .ssh / config). Dari pada [ ! -n "$(grep "^bitbucket.org " ~/.ssh/known_hosts)" ] itu akan lebih baik digunakan [ ! "$(ssh-keygen -F bitbucket.org)" ], yang menemukan garis hash dan non-hash dalam known_hosts. - Claus Conrad