Saya mencoba SSH dari di kantor X ke beberapa kotak Linux di kantor Y. Kotak-kotak Linux di kantor Y ada di belakang NAT dan masing-masing dijalankan pada port mereka sendiri. Saya dapat berhasil menjangkau mereka semua melalui SSH, tetapi saya tidak dapat mengautentikasi.
Saya bisa memasukkan SSH ke dalam kotak pertama, tetapi ketika saya sampai di kotak kedua, tertulis:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
[edited out fingerprint]
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:1
Pemahaman saya adalah bahwa ia mengharapkan untuk melihat kunci yang sama dari alamat IP publik, tetapi melihat yang berbeda karena itu adalah server SSH yang berbeda.
Bagaimana saya bisa memperbaikinya sehingga membuat / menerima kunci yang berbeda dari setiap server di belakang alamat IP yang sama?
Jawaban:
Nama host atau alamat IP disimpan sebagai hash (atau dalam teks biasa tergantung pada opsi dan versi default) di
known_hosts
file Anda . Solusi termudah adalah menambahkan entri untuk setiap host ke DNS atau/etc/hosts
file (ugh!) Dengan alamat IP (WAN) yang sama seperti di/etc/hosts
:dan kemudian
ssh
dengan nama host dan port.sumber
Ada beberapa cara untuk memperbaikinya:
Anda dapat menonaktifkan pemeriksaan kunci host untuk host khusus ini. Di
ssh_config
file Anda (~/.ssh/config
), masukkan sesuatu seperti:Ini mengonfigurasikan
ssh
untuk tidak pernah menyimpan kunci hostremote.host.name
, tetapi downside adalah bahwa sekarang Anda terbuka untuk serangan man-in-the-middle (karena Anda secara buta menerima kunci host yang Anda tidak dapat mengetahui apakah kunci host jarak jauh telah berubah).Anda dapat menggunakan teknik serupa untuk memberi masing-masing host
known_hosts
file unik :Anda kemudian akan terhubung ke host-host ini dengan
ssh hosta
ataussh hostb
, danssh
akan mengambil nama host dan port sebenarnya dari file konfigurasi.sumber
/etc/hosts
file juga akan berfungsi. Saya suka ini lebih baik karena (a) tidak memerlukan hak akses yang meningkat dan (b) itu berarti Anda tidak perlu menentukan nomor port pada baris perintah.~/.ssh/config
(port yang berbeda untuk masing-masinghosta
hostb
) seperti yang dijelaskan dalam jawaban larsks. Demikian juga Anda dapat menentukan nama pengguna, kunci, dll yang berbeda dalam file konfigurasi ini untuk host yang berbeda sehingga yang harus Anda lakukan pada baris perintah adalahssh hosta
ataussh hostb
HostKeyAlias
arahan daripada membagi host yang dikenal ke file yang berbeda. misalnyaHostKeyAlias hosta
Anda tidak mengatakan versi Solaris mana (dan, yang lebih penting, SSH) yang Anda gunakan, tetapi versi OpenSSH yang mutakhir telah mengatasi masalah ini.
Berikut adalah dua entri dari
known_hosts
file saya , yang memiliki alamat IP yang sama tetapi nomor port yang berbeda (satu adalah implisit 22); karena Anda dapat melihat kunci yang disimpan tidak sama.Saya tidak tahu versi OpenSSH mana yang memperkenalkan ini, tetapi saya sedang menjalankan
sumber
Untuk memperluas komentar saya ke jawaban @ larsks, saya pikir menggunakan
~/.ssh/config
entri jauh lebih baik daripada memodifikasi / etc / hosts, meskipun saya akan menggunakanHostKeyAlias
daripada membagi host yang dikenal ke file yang berbeda. misalnya:Dan juga untuk
hostb
sumber