Bagaimana cara menambahkan host yang dikenal SSH dalam skrip bash?


13

Saya membuat skrip bash untuk menyediakan server baru tempat saya dapat menggunakan aplikasi web. Satu hal yang selalu harus saya lakukan adalah sebagai GitHub sebagai host yang dikenal menggunakan ssh git@github.com. Bagaimana saya bisa mengotomatiskan proses ini dalam skrip bash, dan melakukannya dengan cara idempoten?

Jawaban:


17

Cara mudah untuk pergi adalah melakukan sesuatu seperti ini.

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

Jika kotak ini baru, Anda mungkin perlu membuat ~/.sshdirektori sebelum menjalankan ssh-keyscan .

Perlu diingat bahwa ssh-keyscan dapat mengambil sejumlah nama host secara sewenang-wenang. Itu akan mendapatkan semua kunci yang dia bisa.


1
PS - Untuk penyediaan Anda harus menggunakan sesuatu seperti boneka bukan skrip bash. Untuk boneka, ini dapat dengan mudah ditangani dengan sumber daya sshkey . Lihat juga pertanyaan ini untuk metode untuk mengelola server_page yang dikenal_hosts en-masse.com/a/416782/984
Zoredache

2
Itu kedengarannya bagus untuk saya, tetapi setelah menghabiskan beberapa jam masing-masing pada boneka dan pesaing, saya bergegas kembali ke bash script dan kewarasan. Jika alat-alat itu intuitif, saya tampaknya tidak punya intuisi. YMMV.
Ron Burk

Gunakan bash. Saya terus-menerus mengalami masalah di berbagai versi hal-hal seperti boneka atau mungkin. Kami selalu kembali ke bash ... 3 perusahaan berjalan sekarang seperti ini dan bash selalu dapat diandalkan untuk kita.
Ligemer

4

Apakah Anda mencoba untuk secara otomatis menerima kunci baru? Jika demikian, Anda bisa menggunakan -oStrictHostKeyChecking = tidak.
Melakukan hal itu adalah ide yang sangat buruk karena Anda sekarang benar-benar terbuka lebar terhadap serangan manusia-di-tengah.

Opsi yang lebih baik adalah dengan mengelola file yang dikenal_hosts dan menggunakan kembali file itu ketika Anda menyediakan server baru. Tempelkan di github dan tulis skrip sederhana untuk mengunduh file itu sebelum mengisap github.

Pengecekan kunci host yang ketat adalah hal yang baik.


Bisakah Anda menguraikan "kelola file known_hosts"? Saya pikir itulah yang ingin saya lakukan, tetapi ketika saya melihat file, isinya tampak seperti semacam hash / kunci dan tidak terlihat seperti sesuatu yang dimaksudkan untuk dikelola secara manual.
Andrew

2
Menyediakan server baru, secara manual ssh ke github seperti yang Anda lakukan. Terima kunci host ketika diminta. Keluar. Salin ~ / .ssh / known_hosts dari server yang baru disediakan di tempat lain (github, server web, tidak masalah selama Anda bisa mendapatkannya). Lain kali Anda menyediakan server, salin file itu kembali sebelum melakukan sith ke github. Anda tidak perlu mengedit file.
yoonix

Ini lebih baik daripada jawaban saya (lebih aman). Perbaikan lebih lanjut pada jawaban yoonix adalah mengurai 'ssh-keyscan github.com' dan menyimpan kunci yang dikembalikan ke ~ / .ssh / known_hosts dengan cara itu tidak statis dalam file di suatu tempat untuk Anda perlu memperbarui.
Sirex

Itu akan berhasil juga, tetapi saya tidak akan menganggapnya lebih baik. Anda berpotensi mengatur diri sendiri untuk serangan man-in-the-middle jika Anda meraih kunci host baru setiap saat.
yoonix

1
Untuk mengklarifikasi komentar terakhir saya (terlambat diedit): Mengambil kunci host baru setiap kali Anda menyediakan host secara fungsional tidak berbeda dari pengaturan StrictHostKeyChecking = tidak. Dengan salah satu dari mereka, Anda secara buta mempercayai kunci apa pun yang dikirimkan setiap kali Anda menyediakannya. Jika Anda berpikir serangan MITM menjadi tidak mungkin, baca ini dua artikel. Github akan menjadi target BESAR.
yoonix

1

Saya tidak yakin saya mengerti pertanyaannya, tetapi saya pikir Anda ingin mengabaikan prompt diketahui_host atau menghindarinya sama sekali, dalam hal ini:

ssh -o StrictHostKeyChecking = tidak

atau saran lain di: http://www.joedog.org/2012/07/ssh-disable-known_hosts-prompt/


Saya ingin cara non-interaktif untuk menerima kunci host GitHub (karena ini akan terjadi dalam skrip bash).
Andrew

maka ini akan berhasil - itu tidak akan menerima kunci, itu akan mengabaikannya sepenuhnya. Jawaban Yoonix lebih baik
Sirex
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.