bagaimana cara menghindari ssh meminta izin?

58

Kami berusaha mempercepat pemasangan node oracle untuk pemasangan RAC. ini mengharuskan kita menginstal dan mengkonfigurasi ssh agar tidak meminta kata sandi.

Masalahnya adalah: Pada penggunaan pertama, kami diminta

RSA key fingerprint is 96:a9:23:5c:cc:d1:0a:d4:70:22:93:e9:9e:1e:74:2f.
Are you sure you want to continue connecting (yes/no)? yes

Apakah ada cara untuk menghindarinya atau kita akan terkoneksi setidaknya satu kali pada setiap server dari setiap server secara manual?

Nicolas de Fontenay
sumber

Jawaban:

91

Diatur StrictHostKeyChecking nodalam /etc/ssh/ssh_configfile Anda , di mana itu akan menjadi opsi global yang digunakan oleh setiap pengguna di server. Atau atur di ~/.ssh/configfile Anda , di mana itu akan menjadi default hanya untuk pengguna saat ini. Atau Anda dapat menggunakannya di baris perintah:

ssh -o StrictHostKeyChecking=no -l "$user" "$host"

Berikut ini penjelasan cara kerjanya man ssh_config (atau lihat ini versi yang lebih baru ):

StrictHostKeyChecking

      Jika bendera ini disetel ke "ya", ssh tidak akan pernah secara otomatis menambahkan kunci host ke $HOME/.ssh/known_hostsfile, dan menolak untuk terhubung ke host yang kunci host-nya telah berubah. Ini memberikan perlindungan maksimum terhadap serangan kuda trojan, namun, dapat mengganggu ketika /etc/ssh/ssh_known_hostsfile tidak terpelihara, atau koneksi ke host baru sering dibuat. Opsi ini memaksa pengguna untuk menambahkan semua host baru secara manual. Jika bendera ini disetel ke "tidak", sshakan secara otomatis menambahkan kunci host baru ke file host yang dikenal pengguna. Jika tanda ini disetel ke “tanya”, kunci host baru akan ditambahkan ke file host yang diketahui pengguna hanya setelah pengguna mengkonfirmasi bahwa itulah yang benar-benar ingin mereka lakukan, dan ssh akan menolak untuk terhubung ke host yang kunci hostnya telah berubah . Kunci host dari host yang dikenal akan diverifikasi secara otomatis dalam semua kasus. Argumennya harus “ya”, “tidak” atau “bertanya”. Standarnya adalah "bertanya".

Tim Kennedy
sumber
1
+1, saya juga ini untuk server saya. Dan untuk memperjelas, pesan dalam pertanyaan tersebut berasal dari klien ssh pada komputer klien yang tersambung dan bukan dari server.
Patkos Csaba
3
Jawaban ini kedengarannya seperti masalah keamanan dalam pembuatan.
SunSparc
25

ssh-keyscan - Kumpulkan kunci publik ssh

Jika Anda sudah tahu daftar host yang akan Anda sambungkan, Anda bisa mengeluarkan:

ssh-keyscan host1 host2 host3 host4

Anda dapat memberikan -Hopsi untuk memilikinya hash hasil seperti ssh default untuk sekarang

Anda juga dapat memberikan -t keytypeyang keytype adalah dsa, rsa, atau ecdsajika Anda memiliki preferensi untuk jenis kunci untuk meraih bukan default.

Setelah Anda menjalankannya, ssh-keyscanfile yang Anda ketahui akan dihuni sebelumnya dan Anda tidak akan meminta ssh meminta izin untuk menambahkan kunci baru.

kurtm
sumber
1
Saya agak bingung tentang komentar "akan diisi sebelumnya" ... known_hosts tidak dibuat atau dimodifikasi setelah menjalankan ini. Maksud Anda konten dapat disalurkan ke file untuk mengisi itu?
rschwieb
4
Mengonfirmasi dengan techrepublic.com/article/… . ssh-keyscan -H myhost >> ~/.ssh/known_hosts, atau untuk seluruh server,/etc/ssh/ssh_known_hosts
cole
12

Anda dapat menambahkan sidik jari ke masing-masing server yang dikenal. Untuk satu pengguna:

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts
David Souther
sumber
3
Ini bukan lagi cara yang tepat untuk melakukannya sejak saat hashing diperkenalkan.
Deim0s
10

Abaikan Tuan Rumah

Abaikan HostKeyChecking. Untuk ini saya gunakan misalnya:

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null [email protected]

Tambahkan Host

Tambahkan sidik jari host / server ke .ssh/known_hostssebelum koneksi pertama Anda. Ini cara yang lebih aman.

xebeche
sumber
Hai. Oracle mengeluarkan perintah ssh jadi saya tidak memiliki kendali atas cara kerjanya.
Nicolas de Fontenay
Terpilih. Sebagian besar jawaban yang saya lihat lewatkan menyebutkan dev membatalkan file host yang dikenal. Ini membuat perintah jauh lebih bermanfaat dan tidak akan merusak konfigurasi yang ada.
Alex
(2) Tentu, menambahkan sidik jari ke file host yang dikenal adalah pendekatan yang ideal - tetapi bagaimana cara melakukannya? (1) Mengapa bermanfaat mengatur file host yang dikenal pengguna  /dev/null? Bukankah lebih baik dilakukan ssh -oStrictHostKeyChecking=no [email protected]sekali saja untuk memasukkan sidik jari server ke dalam $HOME/.ssh/known_hostsfile, sehingga koneksi selanjutnya akan dilanjutkan tanpa permintaan konfirmasi?
G-Man Mengatakan 'Reinstate Monica'
3

Jalankan cuplikan berikut sebelum mencoba.

mkdir -p ~/.ssh     
echo "Host *" > ~/.ssh/config     
echo " StrictHostKeyChecking no" >> ~/.ssh/config

ps: Sangat tidak untuk server produksi, waspadalah terhadap ManInMiddle

147.3k
sumber
0

Namun saya suka jawaban Tim untuk tipe hal yang tidak jelas, jika ini adalah host yang ingin Anda sambungkan secara teratur, saya akan membuat entri di ~ / .ssh / config Anda (buat jika file tidak ada).

# this example shows wildcard for IP
# you can even use more than one wildcard 10.0.*.* for example
Host 192.168.56.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
# you can even alias it, which is really useful when scp'ing/rsyncing foo:/path/to/remote
Host foo
    HostName foo-long-192-10-135-55.hostname.not-going-to-remember.doh
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
Jaime
sumber