Mencoba ssh ke komputer yang saya kendalikan, saya menerima pesan yang biasa:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
[...].
Please contact your system administrator.
Add correct host key in /home/sward/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/sward/.ssh/known_hosts:86
RSA host key for [...] has changed and you have requested strict checking.
Host key verification failed.
Saya memang mengubah kunci. Dan saya membaca beberapa lusin posting yang mengatakan bahwa cara untuk menyelesaikan masalah ini adalah dengan menghapus kunci lama dari known_hosts
file tersebut.
Tapi yang saya inginkan adalah ssh menerima kunci lama dan kunci baru. Bahasa dalam pesan kesalahan (" Add correct host key
") menunjukkan bahwa harus ada beberapa cara untuk menambahkan kunci host yang benar tanpa menghapus yang lama.
Saya belum dapat menemukan cara menambahkan kunci host baru tanpa menghapus yang lama.
Apakah ini mungkin, atau apakah pesan kesalahannya hanya menyesatkan?
Jawaban:
dapatkan kunci rsa dari server Anda, di mana
server_ip
alamat IP server Anda, seperti192.168.2.1
:Tanggapan sampel:
dan pada klien, salin seluruh baris respons
server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG...
, dan tambahkan kunci ini ke bagian bawah~/.ssh/known_hosts
file Anda :sumber
ssh-keyscan -t rsa1,dsa,rsa,ecdsa,ed25519 server_ip
- tetapi satu-satunya alasan untuk menemukanrsa1
dandsa
kunci adalah untuk mengidentifikasi server yang perlu ditingkatkan / dikonfigurasi ulangHapus entri itu dari known_hosts menggunakan:
Ini akan menghapus IP atau nama host yang bermasalah dari file known_hosts dan mencoba untuk menyambung kembali.
Dari halaman manual:
sumber
Cara yang sangat sederhana adalah:
Kemudian edit host dikenal untuk menghapus kunci asli, lalu ssh ke host menggunakan:
Ini akan menambahkan kunci baru secara otomatis; lalu bandingkan kedua file tersebut. Program seperti berbaur adalah cara yang bagus untuk membandingkan dua file. Kemudian gabungkan file-file untuk membuat diketahui_hosts berisi kedua kunci
'Alasan' saya untuk menyimpan dua kunci adalah bahwa sistem tujuan adalah multiboot, meskipun saya berani mengatakan ada cara untuk menyinkronkan kunci di seluruh instalasi, tampaknya lebih mudah untuk mengizinkan beberapa kunci.
EDIT 2015/06
Saya harus menambahkan, meninjau kembali sekarang, bahwa saya melihat cara yang lebih sederhana [selama entri dapat diidentifikasi, biasanya dari nama host / alamat IP selain dari pesan kesalahan yang merujuk lokasi spesifiknya];
Bahkan ada opsi HostKeyAlias seperti pada
kemudian selanjutnya, setelah ssh client menambahkan kunci baru di bawah alias, Anda dapat mengedit known_hosts untuk mengganti hostname / alamat IP 'asli' untuk alias atau terhubung ke inkarnasi host tersebut dengan opsi alias lebih dari sebelumnya
sumber
Saya memiliki masalah yang sama dengan pi raspberry yang saya boot dengan beberapa sistem yang berbeda (sistem dev untuk mengkompilasi binari lengan, proyek, xbmc, dll.) Dan telah mengalami masalah yang sama. Mereka menggunakan DHCP di jaringan lokal dan router saya selalu menggunakan kembali IP yang sama karena alamat MACnya sama. Saya telah menyelesaikannya dengan menggunakan nama domain berbeda di file host saya:
File known_hosts menyimpan sidik jari dengan nama host sehingga meskipun alamat IP yang sama, setiap nama host yang unik mendapat entri yang berbeda.
Saya muak menambahkan nama ke file host setiap kali saya menggunakan sistem baru jadi saya datang dengan cara yang lebih malas dengan menggunakan nol terkemuka pada alamat ip seperti:
Setiap variasi dari alamat ip (tidak terkanonik) mendapatkan entri sendiri di known_hosts.
sumber
CheckHostIP no
di~/.ssh/config
dapat masih menggunakan celah tersebut. Anda bahkan dapat mendefinisikan alias di sana sehingga Anda tidak perlu mengutak-atik/etc/hosts
dan menentukanCheckHostIP no
hanya untuk 3 nama host ini.Jika klien dan server Anda memiliki OpenSSH 6.8 atau yang lebih baru, Anda dapat menggunakan
UpdateHostKeys yes
opsi dissh_config
atau~/.ssh/config
. Sebagai contoh:Hal ini membuat SSH menyimpan semua kunci host yang harus dimiliki server
known_hosts
, dan ketika server mengubah atau menghapus satu kunci host, kunci tersebut juga diubah atau dihapus di server Andaknown_hosts
.sumber
Saya tidak mengerti mengapa Anda ingin bekerja dengan dua kunci, tetapi Anda tentu dapat menambahkan lebih dari satu kunci yang valid ke
~/.ssh/known_hosts
file, tetapi Anda harus melakukannya secara manual.Solusi lain mungkin menggunakan
StrictHostKeyChecking=no
opsi untuk host spesifik ini:yang bisa Anda masukkan ke alias
~/.profile
atau sesuatu yang serupa.sumber
Jika Anda hanya ssh ke jaringan lokal maka ...
Solusi sederhana adalah menghapus file kunci lama dan menggantinya dengan yang kosong. Ini akan memungkinkan Anda untuk mengotorisasi ulang semua koneksi Anda dengan kunci baru. Jika Anda memiliki kunci ssh yang disimpan untuk situs di luar jaringan lokal Anda, maka Anda perlu memastikan bahwa koneksi awal Anda aman seperti yang Anda lakukan saat pertama kali terhubung ke server itu.
misalnya
Kemudian tekan spasi, backspace cntl + x dan 'y' untuk menyimpan buffer (file) baru. Praktiknya buruk tapi oke asalkan Anda tidak secara teratur melakukan ssh'ing di luar jaringan lokal Anda (mis. Uni atau server kerja)
Pada jaringan lokal yang aman ini aman karena Anda tidak bisa mendapatkan seorang pria dalam serangan tengah.
Selalu lebih baik menggunakan kode yang Anda mengerti!
sumber
known_hosts
file setiap kali akan meniadakan sebagian besar keamanan jika tidak disediakan oleh ssh.Begitu banyak jawaban, tetapi begitu banyak yang melepaskan perlindungan dengan mematikan pemeriksaan host ketat sepenuhnya, atau menghancurkan info host yang tidak terkait atau hanya memaksa pengguna untuk menerima kunci secara interaktif, mungkin pada titik kemudian, ketika itu tidak terduga.
Berikut adalah teknik sederhana untuk memungkinkan Anda membiarkan host ketat memeriksa, tetapi perbarui kunci dengan cara yang terkontrol, saat Anda mengharapkannya berubah:
Hapus kunci lama dan perbarui dalam satu perintah
Ulangi dengan alamat IP atau nama host lain jika Anda menggunakannya.
Keuntungan dari pendekatan ini adalah bahwa ia menerima server tepat sekali. Sebagian besar versi ssh-keygen tampaknya tidak mengembalikan kesalahan jika server yang Anda coba hapus tidak ada dalam file host yang dikenal, jika ini merupakan masalah bagi Anda, gunakan dua perintah secara berurutan.
Pendekatan ini juga memverifikasi konektivitas dan memancarkan pesan yang bagus untuk log dalam perintah ssh (yang masuk, memperbarui kunci host, dan mengeluarkan kunci host SSH yang diperbarui kemudian segera keluar.
Jika versi ssh-keygen Anda mengembalikan kode keluar yang tidak nol, dan Anda lebih suka menangani ini tanpa kesalahan, terlepas dari koneksi sebelumnya, cukup gunakan dua perintah secara berurutan, abaikan kesalahan apa pun pada perintah ssh-keygen.
Jika Anda menggunakan teknik ini, Anda tidak perlu memvariasikan perintah ssh Anda, atau mematikan pemeriksaan host kecuali selama satu perintah ssh. Anda dapat yakin bahwa sesi ssh di masa depan akan bekerja tanpa konflik atau perlu secara eksplisit menerima kunci baru, selama perintah ssh di atas berjalan tanpa kesalahan.
sumber
Saya memiliki masalah yang sama.
Yang saya lakukan adalah
sudo nano /home/user/.ssh/ host_allow
dan menghapus kuncinya.Ketika saya ssh kembali ke server itu menambahkan kunci baru.
sumber
Gunakan perintah sed untuk menghapus garis yang menyinggung
Hapus baris 86 sebagaimana disebutkan dalam host yang dikenal.
Lain kali ketika mengakses menggunakan ssh, sistem akan secara otomatis menambahkan kunci baru.
ssh versi terbaru
menggunakan:
Ini akan menghapus entri nama host dan mengambil cadangan dari yang lama
.known_host
sebagaiknown_hosts.old
sumber