Alur kerja paling halus untuk menangani kesalahan verifikasi host SSH?

41

Ini adalah masalah sederhana yang kita semua hadapi dan mungkin diselesaikan secara manual tanpa banyak berpikir.

Saat server berubah, disiapkan kembali, atau alamat IP dialokasikan kembali, kami menerima pesan verifikasi host SSH di bawah ini. Saya tertarik merampingkan alur kerja untuk menyelesaikan kesalahan identifikasi ssh ini.

Diberikan pesan berikut, saya biasanya vi /root/.ssh/known_hosts +434dan menghapus ( dd) baris yang menyinggung.

Saya telah melihat pengembang / pengguna di organisasi lain menghapus seluruh known_hosts file mereka karena frustrasi dalam melihat pesan ini. Meskipun saya tidak melangkah sejauh itu, saya tahu ada cara yang lebih elegan untuk menangani ini.

Kiat?

[root@xt ~]# ssh las-db1

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
ed:86:a2:c4:cd:9b:c5:7a:b1:2b:cc:42:15:76:8c:56.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:434
RSA host key for las-db1 has changed and you have requested strict checking.
Host key verification failed.
putih
sumber
Kami memiliki masalah yang sama. Saya tidak memiliki pengalaman dengan ti.arc.nasa.gov/opensource/projects/mesh di NASA, tetapi ada dalam daftar teknologi yang akan saya ulas .
Andrew Gilmartin
1
Mengapa tidak menyalin kunci lama saat menginstal ulang / merealokasi server?
Random832
@ Random832 Tidak berskala dalam situasi di mana Anda memiliki banyak server ... Atau jika Anda memiliki lingkungan lab / tes tempat Anda sering mendaur ulang alamat IP. Atau kasus lain; pengganti server yang tidak direncanakan di mana server asli tidak tersedia ...
ewwhite
3
Pertanyaan besar yang saya miliki adalah: Bagaimana Anda masuk ke situasi ini? Jika Anda menggunakan kembali nama host, Anda mungkin ingin mempertimbangkan kembali standar penamaan host Anda ( tools.ietf.org/html/rfc1178 ). Jika Anda menggunakan kembali alamat IP, Anda harus memiliki dekomisioning kunci ssh sebagai bagian dari prosedur yang sama dengan menonaktifkan server sebelumnya pada alamat IP tersebut. Jika Anda bekerja di lingkungan "skala web" di mana penggunaan ulang IP terjadi secara otomatis dan nama host semi-tidak berarti adalah wajib, maka Anda harus memiliki proses siklus server yang cukup terotomatisasi dengan baik yang memperbaiki kunci ssh akan diproses
Paul Gear

Jawaban:

47

Anda dapat menggunakan ssh-keygenperintah untuk menghapus entri tertentu dengan host:

ssh-keygen -R las-db1

Jika Anda tidak memiliki perintah itu, Anda selalu dapat menggunakan sed:

sed -i '/las-db1/d' /root/.ssh/known_hosts
Kyle Brandt
sumber
3
Menggunakan ssh-keygen -R untuk menyelesaikan masalah dengan kunci yang saling bertentangan juga apa yang disarankan klien ssh di Ubuntu dalam pesan kesalahan saat masalah ini terjadi.
Kenny Rasschaert
Saya tidak menyadari bahwa beralih ke ssh-keygenperintah. Baik!
ewwhite
10
Ingatlah untuk memeriksa dan memastikan bahwa seseorang sebenarnya tidak "MELAKUKAN SESUATU NASTY!"
Michael Hampton
1
Pastikan Anda tidak melakukan ini di konferensi!
Paul Gear
2
@ewwhite Anda mengisi /etc/ssh/known_hostsfile di jaringan Anda dengan kunci host yang sesuai (dikelola dengan boneka, dll.), atau Anda mengisi file ~ / .ssh / known_hosts pribadi Anda (untuk melakukan salah satu dari ini, Anda dapat menjalankan ssh-keyscanlebih dari barang yang dikenal / aman yang diketahui koneksi). Kecuali itu (dan dengan asumsi Anda peduli sama sekali tentang keamanan) Kumpulan UserKnownHostsFile=/dev/nulldan StrictHostKeyChecking=nodi Anda ~/.ssh/config file(atau lulus pilihan untuk ssh dengan -o)
voretaq7
25

Sebagai pengguna boneka, metode saya untuk menyelesaikan ini adalah membuat server boneka saya mengumpulkan kunci host SSH saya dan menerbitkannya ke semua sistem saya yang membuat koneksi SSH.

Dengan cara ini saya tidak perlu khawatir untuk menghapusnya. Sembilan puluh sembilan persen dari waktu boneka telah berjalan dan memperbarui kunci untuk saya karena saya memiliki agen saya berjalan setiap tiga puluh menit. Pengecualian untuk saya sangat jarang, dan jadi saya tidak keberatan mengedit cepat dari sistem yang dikenal luas jika saya tidak mau menunggu.

class ssh::hostkeys {

  @@sshkey { "${::clientcert}_rsa":
    type => rsa,
    key => $sshrsakey,
    tag => 'rsa_key',
  }

  if 'true' == $common::params::sshclient {
    Sshkey <<| tag == 'rsa_key' |>> {
      ensure => present
    }
  }

  file {'/etc/ssh/ssh_known_hosts':
    ensure => present,
    owner => 'root',
    group => 'root',
    mode => 0644,
  }

}
Sakit kepala
sumber
+1 Langkah bagus untuk menggabungkan alat manajemen konfigurasi.
ewwhite
4

Saya ingin menambahkan saran yang dapat membantu Anda dalam kasus yang sangat spesifik di mana keamanan kurang diperhatikan.

Saya memiliki lingkungan lab dengan mesin yang sering diinstal ulang. Setiap kali itu terjadi, kunci host baru dibuat (saya mungkin bisa menyimpan kunci host di suatu tempat dan mengaturnya dalam skrip post-install).

Karena keamanan bukan masalah bagi saya di lingkungan lab ini, dan kunci sering berubah, saya memiliki yang berikut dalam file .ssh / config saya:

Host lab-*
  User kenny
  IdentityFile ~/.ssh/lab_id_rsa
  StrictHostKeyChecking no
  UserKnownHostsFile=/dev/null

Ini memastikan bahwa menghubungkan ke mesin lab saya tidak akan pernah menyebabkan kesalahan itu lagi dan klien ssh saya hanya akan terhubung tanpa memeriksa kunci host.

Ini adalah sesuatu yang harus Anda lakukan hanya jika keamanan sama sekali tidak menjadi perhatian Anda, karena ini menempatkan Anda pada posisi yang rentan untuk serangan pria di tengah.

Kenny Rasschaert
sumber
1
Tampaknya berisiko. Saya ingin menyimpan verifikasi tuan rumah karena beberapa di antaranya adalah sistem yang menghadap publik.
ewwhite
1
Inilah sebabnya dia menyebutkan bahwa metode ini hanya untuk "di mana keamanan kurang / tidak ada perhatian". Jaringan pribadi / lingkungan lab sempurna untuk konfigurasi ini. Multi-mesin produksi skala otomatis / sistem yang menghadap publik, tidak terlalu banyak.
dannosaur
4

Menurut catatan rilis openssh 5.6 , Anda tidak perlu menggunakan kunci host lagi:

Otentikasi berbasis host sekarang dapat menggunakan kunci host sertifikat. Kunci CA harus ditentukan dalam file known_hosts menggunakan penanda @ cert-authority seperti dijelaskan dalam sshd (8).

Peringatan : Saya belum pernah mendengar ada orang yang menggunakan fitur ini dalam produksi sejauh ini. Gunakan dengan risiko Anda sendiri (tapi saya percaya pengembang openssh cukup paranoid untuk tidak merilis fitur pembunuh tanpa banyak pengujian dan audit kode).


sumber
2

SSHFP DNS ResourceRecord dapat membantu tergantung pada seberapa banyak klien ssh Anda memanfaatkannya. Simpan semua sidik jari kunci publik ssh Anda di atas sana dengan nama host.

Terapkan DNSSEC atau DNS melalui SSL sebelumnya.
http://www.ietf.org/rfc/rfc4255.txt

FreeIPA.org menangani manajemen kunci host dan pengguna serta Sertifikat PKI. Itu juga secara otomatis mengunggah catatan DNS SSHFP ketika kunci baru dibuat.

System Security Services Daemon (SSSD) dapat dikonfigurasi untuk melakukan cache dan mengambil kunci SSH host sehingga aplikasi dan layanan hanya perlu mencari di satu lokasi untuk kunci host. Karena SSSD dapat menggunakan FreeIPA sebagai salah satu penyedia informasi identitasnya, FreeIPA menyediakan repositori kunci yang universal dan terpusat. Administrator tidak perlu khawatir tentang mendistribusikan, memperbarui, atau memverifikasi kunci SSH host.

http://docs.fedoraproject.org/en-US/Fedora/17/html/FreeIPA_Guide/host-keys.html

rjt
sumber