Salin kunci ssh dari satu server ke server lain

12

Saya punya server (anggap ipnya abcd) yang memungkinkan pengguna untuk masuk melalui ssh. Sekarang saya ingin mengubah mesin fisik agar ip tetap sama. Sehingga mesin baru masih diakses oleh pengguna seperti ini

$ ssh abcd

Masalahnya adalah, setiap kali satu pengguna mencoba masuk, ia mendapatkan kesalahan ketidakcocokan ssh-key berikut.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@
@ PERINGATAN: IDENTIFIKASI HOST REMOTE TELAH BERUBAH! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@
MUNGKIN SESUATU YANG MELAKUKAN SESUATU SESUATU NASTY!
Seseorang bisa menguping kamu sekarang (serangan man-in-the-middle)!
Mungkin juga kunci host RSA baru saja diubah.
Sidik jari untuk kunci RSA yang dikirim oleh host jarak jauh adalah
02: dc: c6: 18: 1b: 34: b7: 1d: fa: 90: ab: e1: 95: 48: 69: 84.
Silakan hubungi administrator sistem Anda.
Tambahkan kunci host yang benar di /home/user/.ssh/known_hosts untuk menghilangkan pesan ini.
Masukkan kunci di /home/user/.ssh/known_hosts:37
Kunci host RSA untuk alumni telah berubah dan Anda telah meminta pemeriksaan ketat.
Verifikasi kunci host gagal.

Saya tahu bahwa pengguna dapat menghapus baris # 37 dari file ~ / .ssh / known_hosts dan lain kali dia akan mendapatkan prompt ya / tidak. Apa yang saya inginkan adalah bahwa pengguna harus tetap tidak menyadari hal penggantian seluruh mesin ini dan hanya mendapatkan prompt untuk kata sandi.

Bagaimana cara melakukannya?

Souvik Pal
sumber
3
Apakah Anda sadar bahwa ini akan mengalahkan sshperlindungan satu-satunya terhadap manusia di serangan tengah dan dapat mengakibatkan Anda mengirimkan kata sandi Anda langsung ke penyerang alih-alih mesin yang dimaksud? Kecuali Anda tahu pasti bahwa Anda kebal terhadap serangan aktif (misalnya, Anda berada di jaringan internal aman yang sama dengan mesin target) ini merusak sshmodel keamanan.
David Schwartz
Iya. Kedua mesin berada di jaringan internal yang sama. Bahkan pengguna berada di dalam jaringan internal yang sama. Dengan situasi ini, apa saja pilihan saya?
Souvik Pal
Itu tidak cukup. Mereka harus berada dalam jaringan internal aman yang sama . Artinya, mereka harus benar-benar, 100% percaya bahwa tidak ada perangkat yang terhubung ke jaringan internal yang tidak 100% aman, dan mereka harus 100% mempercayai semua orang yang memiliki kendali atas perangkat tersebut atau dapat melampirkan perangkat ke jaringan itu. Dengan kata lain, dalam hampir semua skenario realistis, ini adalah ide yang buruk.
David Schwartz
2
Ini hal yang sangat masuk akal untuk dilakukan. Saya mereplikasi kunci server ssh ke server lain untuk HA sehingga ketika saya masuk saya mendapatkan kesalahan-kesalahan itu. Selain itu saya diemail pada failover.
Matt H
3
Saya setuju dengan Matt. Jika Anda mengendalikan kedua mesin dan oleh karena itu pemilik kunci, memindahkan kunci host dari satu mesin ke dalam kendali Anda BUKAN seorang pria dalam serangan tengah atau risiko. Jika pengguna yang terhubung mempercayai kunci host Anda, itu tidak masalah.
Ross

Jawaban:

14

Seperti yang disebutkan Ethabell , Anda dapat menyalin kunci host saat ini ke server baru.

Anda dapat menemukan kunci host Anda dengan membuka sshd_configfile Anda (Pada kotak Ubuntu saya 12,04 nya /etc/ssh/sshd_config). Dalam file konfigurasi, cari HostKeyentri. Entri ini akan memberi tahu Anda di mana file kunci host berada. Anda harus dapat menyalin file-file ini ke server baru dan memperbarui server baru sshd_configuntuk menunjuk ke kunci yang disalin (atau hanya menimpa file yang sudah ada di server baru).

Perhatikan juga bagian ini dari sshd_confighalaman manual, khususnya bagian tentang izin:

Menentukan file yang berisi kunci host pribadi yang digunakan oleh SSH. Standarnya adalah /etc/ssh/ssh_host_keyuntuk protokol versi 1, dan /etc/ssh/ssh_host_dsa_key, /etc/ssh/ssh_host_ecdsa_keydan /etc/ssh/ssh_host_rsa_keyuntuk protokol versi 2. Perhatikan bahwa sshd (8) akan menolak untuk menggunakan file jika itu dapat diakses kelompok / dunia. Dimungkinkan untuk memiliki beberapa file kunci host. Kunci "rsa1" digunakan untuk versi 1 dan "dsa", "ecdsa" atau "rsa" digunakan untuk versi 2 protokol SSH.

astaga
sumber
1

Jika Anda memiliki kunci host asli, Anda dapat memulihkannya dan ini akan menghentikan kesalahan.

Atau, Anda bisa mematikan StrictHostKeyChecking di file konfigurasi sshd Anda.

... Melakukan ini, bagaimanapun, adalah ide yang sangat buruk. Jika ada cara bagi Anda untuk hanya berjalan ssh-keygen -R server.example.comdi mesin klien, itu akan menjadi cara terbaik - karena mematikan pemeriksaan kunci host seperti mengatakan, "Hei. Serang aku." Saya mendapatkan ketidakjelasan yang diinginkan saat segala sesuatu berubah, tetapi keamanan harus menjadi prioritas # 1 daripada menutupi perubahan.

Etabelle
sumber
Bisakah Anda menguraikan cara mengembalikan kunci host pada mesin yang lebih baru?
Souvik Pal
1

Anda bisa mencobanya seperti ini

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"' 

Perhatikan bahwa jika folder .ssh belum ada, perintah di atas akan gagal. Selain itu, mungkin lebih baik saat membuat file untuk mengatur izin seminimal mungkin (pada dasarnya baca-tulis hanya untuk pemilik). Ini adalah perintah yang lebih maju:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'

Untuk informasi lebih lanjut tentang masalah ini, Anda harus membuka situs web ini: Kesalahan Perubahan Kunci Host SSH

Govind Karamta
sumber