Pertanyaan “Tambahkan kunci host yang benar di known_hosts” / beberapa kunci host ssh per hostname?


Mencoba untuk masuk ke komputer yang saya kontrol, saya mendapatkan pesan yang dikenalnya:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 kuncinya. Dan saya membaca beberapa lusin pengeposan yang mengatakan bahwa cara mengatasi masalah ini adalah dengan menghapus kunci lama dari known_hosts mengajukan.

Tapi yang saya inginkan adalah 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 mengetahui cara menambahkan kunci host baru tanpa menghapus yang lama.

Apakah ini mungkin, atau apakah pesan kesalahan sangat menyesatkan?


121
2017-10-13 14:01




Ini adalah kunci host yang menghasilkan kesalahan. Tuan rumah harus memiliki satu dan hanya satu kunci. Ini tidak ada hubungannya dengan klien atau kunci pengguna. Apakah Anda memiliki satu alamat IP yang mengapung di antara host yang berbeda atau sesuatu? - David Schwartz
Dalam kasus saya, saya tahu saya akan beralih di antara dua kunci banyak dalam waktu dekat sambil bermain-main dengan beberapa hal. Tampaknya ini juga akan berguna dalam satu IP dengan beberapa situasi host yang Anda sarankan. Terutama saya hanya ingin tahu apakah ini mungkin untuk pendidikan saya sendiri selain dari aplikasi praktis tertentu. - Samuel Edwin Ward


Jawaban:


  1. dapatkan kunci rsa server Anda:

    $ ssh-keyscan -t rsa server_ip
    # server_ip SSH-2.0-OpenSSH_4.3
    server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG...
    
  2. dan pada klien, tambahkan kunci ini ke ~/.ssh/known_hosts:

    server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqx9m529...(the offending key)
    server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG...
    

126
2017-10-13 14:38



Ini berhasil! Namun, saya menggunakan "HashKnownHosts", sehingga entri tampak sedikit tidak pada tempatnya. Untungnya ssh_config (5) mengarahkan saya ke ssh-keygen (1) yang menjelaskan bahwa saya dapat menggunakan "ssh-keygen -H" untuk menampilkan entri yang tidak disembunyikan. Terima kasih! - Samuel Edwin Ward
Ini "berfungsi" tetapi Anda tidak memverifikasi kunci, jadi Anda rentan terhadap serangan mitm ... - JasperWallace
@ JayperWallace, selama langkah pertama dilakukan melalui koneksi aman (misalnya menggunakan localhost) itu harus cukup aman, saya pikir - ony
Apakah ada cara untuk mengumpulkan semua jenis kunci dari server? Kadang-kadang Anda tidak tahu apakah mereka RSA, DSA, ECDSA, RSA1 ... dll. - Sopalajo de Arrierez
@SopalajodeArrierez halaman manual yang sama juga mengatakan Anda dapat memisahkan jenis dengan koma, begitu juga ssh-keyscan -t rsa1,dsa,rsa,ecdsa,ed25519 server_ip - tetapi satu-satunya alasan untuk menemukannya rsa1 dan dsa kunci adalah untuk mengidentifikasi server yang perlu ditingkatkan / dikonfigurasi ulang - kbolino


Hapus entri dari known_hosts menggunakan:

ssh-keygen -R *ip_address_or_hostname*

Ini akan menghapus IP atau nama host yang bermasalah dari known_hosts file dan coba hubungkan lagi.

Dari halaman manual:

-R hostname
  Menghapus semua kunci milik hostname dari file known_hosts. Opsi ini berguna untuk menghapus host hash (lihat opsi -H   atas).


74
2018-02-09 06:49



"Bagaimana cara menambahkan kunci host baru tanpa menghapus yang lama." - Samuel Edwin Ward
Ini adalah solusi terbaik! - Thomas Decaux
Bagaimana ini memiliki 19 suara? Itu tidak mendekati menjawab pertanyaan yang ditanyakan .. - Molomby
Pertanyaan Anda muncul kedua ketika saya google untuk "git ssh memperbarui kunci host secara otomatis". Jawaban ini adalah apa yang saya cari. Membuka pertanyaan baru dengan tepat apa yang saya inginkan bisa ditutup sebagai duplikat. - Jason Goemaat
Nama host juga berfungsi - damluar


Cara yang sangat sederhana adalah:

cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak

Kemudian edit known_hosts untuk menghapus kunci asli, lalu ssh ke host menggunakan:

ssh name@computer

Itu akan menambahkan kunci baru secara otomatis; lalu bandingkan kedua file tersebut. Program seperti meld adalah cara yang bagus untuk membandingkan kedua file tersebut. Kemudian gabungkan file untuk membuat known_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 memungkinkan 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 cukup selain dari pesan kesalahan yang merujuk lokasi spesifiknya];

  1. Edit known_hosts untuk menambahkan # pada awal entri 'lama' masuk known_hosts sementara
  2. Hubungkan [ssh ke host], setujui perintah untuk menambahkan kunci baru 'secara otomatis'
  3. Kemudian edit kembali known_hosts untuk menghapus #

Bahkan ada opsi HostKeyAlias ​​seperti pada

ssh -o HostKeyAlias=mynewaliasforthemachine name@computer

kemudian setelah itu, setelah klien ssh menambahkan kunci baru di bawah alias, Anda dapat mengedit known_hosts untuk menggantikan hostname / alamat IP 'asli' untuk alias atau terhubung ke inkarnasi dari host tersebut dengan opsi alias selamanya


16
2018-04-30 22:29



Ini 'berbaur'? meldmerge.org - Samuel Edwin Ward
itulah yang mencair :) apt-get / yum nama install hanya berbaur - Mark
Saya melakukan variasi saran Anda yang bekerja dengan baik - alih-alih cp, mv, lalu ssh, lalu cat ~ / .ssh / known_hosts.bak ~ / .ssh / known_hosts> tmp; mv tmp ~ / .ssh / known_hosts - Peter N Lewis


Saya memiliki masalah yang sama dengan raspberry pi yang saya boot dengan beberapa sistem yang berbeda (sistem dev untuk menyusun binari lengan, proyek, xbmc, dll) dan telah mengalami masalah yang sama. Mereka menggunakan DHCP pada jaringan lokal dan router saya selalu menggunakan kembali IP yang sama karena alamat MAC adalah sama. Saya telah memecahkannya dengan menggunakan nama domain yang berbeda di file host saya:

10.10.10.110 pi-dev
10.10.10.110 pi-xbmc
10.10.10.110 pi-etc

File known_hosts menyimpan sidik jari berdasarkan nama host sehingga meskipun itu adalah alamat IP yang sama, setiap nama host yang unik mendapatkan entri yang berbeda.

Saya bosan menambahkan nama-nama ke host file setiap kali saya menggunakan sistem baru jadi saya datang dengan cara yang lebih malas dengan menggunakan nol terkemuka di alamat ip seperti:

$ ssh pi@10.10.10.110
$ ssh pi@010.10.10.110
$ ssh pi@10.010.10.110

Setiap variasi dari alamat ip (uncanonicalized) mendapat entri itu sendiri di known_hosts.


7
2017-11-04 02:28



Orang-orang OpenSSH bersikap bijaksana kepada saya, celah ini tidak lagi berfungsi dalam versi yang lebih baru. - Mike
Kamu bisa memakai CheckHostIP no di ~/.ssh/config untuk bisa tetap menggunakan celah. Anda bahkan dapat mendefinisikan alias Anda di sana sehingga Anda tidak perlu bermain-main /etc/hosts dan definisikan CheckHostIP no hanya untuk 3 nama host ini. - GnP


Jika klien dan server Anda memiliki OpenSSH 6.8 atau yang lebih baru, Anda dapat menggunakan UpdateHostKeys yes pilihan di Anda ssh_config atau ~/.ssh/config. Sebagai contoh:

Host *
    UpdateHostKeys yes

Ini membuat SSH menyimpan semua kunci host yang harus dimiliki oleh server known_hosts, dan ketika server mengubah atau menghapus satu kunci host, kuncinya juga diubah atau dihapus di Anda known_hosts.


2
2017-09-22 04:28



Ini adalah jawaban yang paling berguna! Meskipun tidak secara eksplisit menawarkan cara untuk menyelesaikan pertanyaan asli jika kunci host sudah diubah, semua jawaban lainnya tidak aman karena mereka tidak memverifikasi kunci host baru. Opsi ini memungkinkan Anda melakukan rollover aman ke kunci host baru. - Jaap Eldering


Saya tidak melihat mengapa Anda ingin bekerja dengan dua kunci, tetapi Anda tentu saja 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 pilihan untuk host khusus ini:

ssh -o StrictHostKeyChecking=no user@host

yang dapat Anda masukkan ke alias di Anda ~/.profile atau yang serupa.

alias hc=ssh -o StrictHostKeyChecking=no user@host

1
2017-10-13 14:49



StrictHostKeyChecking tampaknya tidak membantu dalam kasus ini; rupanya itu hanya menentukan perilaku ketika tuan rumah tidak dalam file known_hosts. Disebutkan di sini: gossamer-threads.com/lists/openssh/dev/45349#45349 - Samuel Edwin Ward
Ia bekerja di sini. Anda akan mendapatkan peringatan, tetapi proses masuk terus berlanjut. - Sven♦
Itu aneh. Apakah Anda menggunakan otentikasi kata sandi? Apakah Anda menggunakan OpenSSH? - Samuel Edwin Ward


Jika kamu hanya ssh ke jaringan lokal lalu ...

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 Anda terhubung ke server tersebut.

misalnya

cp known_hosts known_hosts.old
rm known_hosts
nano known_hosts

Kemudian tekan spasi, backspace cntl + x dan 'y' untuk menyimpan buffer baru (file). Praktik buruknya tetapi oke menyediakan Anda tidak secara teratur berserakan di luar jaringan lokal Anda (misalnya server uni atau server kerja)

Pada jaringan lokal yang aman ini aman karena Anda tidak bisa mendapatkan seorang pria di serangan tengah.

Itu selalu lebih baik menggunakan kode yang Anda pahami!


0
2018-06-15 21:44



Menyeka keseluruhan known_hosts file setiap kali akan meniadakan sebagian besar keamanan yang disediakan oleh ssh. - kasperd
Memang, saya berpendapat bahwa pada jaringan internal yang aman, lebih aman untuk memahami kode Anda dan menghindari keamanan daripada menyalin kode tanpa berpikir. Pada jaringan eksternal maka situasinya akan berbeda. - Aaron


Begitu banyak jawaban, tetapi begitu banyak yang menyerah perlindungan dengan mematikan pemeriksaan host yang ketat sepenuhnya, atau menghancurkan info host yang tidak terkait atau hanya memaksa pengguna untuk menerima kunci secara interaktif, mungkin di kemudian hari, ketika itu tidak terduga.

Berikut ini adalah teknik sederhana untuk memungkinkan Anda untuk membiarkan host yang ketat memeriksa, tetapi memperbarui kunci dengan cara yang terkontrol, ketika Anda mengharapkan untuk berubah:

  • Hapus kunci lama dan perbarui dalam satu perintah

    ssh-keygen -R server.example.com && \
        ssh -o StrictHostKeyChecking=no server.example.com echo SSH host key updated.
    
  • Ulangi dengan alamat IP atau nama host lain jika Anda menggunakannya.

Keuntungan dari pendekatan ini adalah bahwa rekeys server tepat satu kali. Sebagian besar versi ssh-keygen tampaknya tidak mengembalikan kesalahan jika server yang Anda coba hapus tidak ada di file host yang dikenal, jika ini adalah masalah bagi Anda, gunakan dua perintah secara berurutan.

Pendekatan ini juga memverifikasi konektivitas dan memancarkan pesan yang bagus untuk log dalam perintah ssh (yang log in, memperbarui kunci host, dan output Kunci host SSH diperbarui lalu segera keluar.

Jika versi ssh-keygen Anda mengembalikan kode keluar non-nol, dan Anda lebih suka untuk menangani ini tanpa kesalahan, terlepas atau koneksi sebelumnya, cukup gunakan dua perintah secara berurutan, abaikan kesalahan pada perintah ssh-keygen.

Jika Anda menggunakan teknik ini, Anda tidak perlu mengubah-ubah perintah ssh Anda, atau menonaktifkan pemeriksaan host kecuali selama satu perintah ssh. Anda dapat yakin bahwa sesi ssh masa depan akan bekerja tanpa konflik atau perlu secara eksplisit menerima kunci baru, selama perintah ssh di atas berjalan tanpa kesalahan.


-1
2017-09-18 01:56





Saya memiliki masalah yang sama.

Yang saya lakukan hanyalah sudo nano /home/user/.ssh/ host_allow dan menghapus kuncinya.

Ketika saya ssh kembali ke server, itu menambahkan kunci baru.


-3
2018-05-18 11:31



Beberapa informasi lebih lanjut tentang mengapa ini terjadi akan membantu jawabannya. - Drew Khoury