Apakah mungkin untuk menghapus kunci host tertentu dari file SSH's known_hosts?
Saya biasanya berakhir menghapus seluruh known_hosts
file, yang saya tidak punya masalah dengan melakukan, tetapi hanya karena penasaran, apakah mungkin untuk menghapus hanya satu entri?
Saya membuka known_hosts
file, tetapi saya berjuang untuk memahami isinya.
Di bawah ini adalah pesan yang saya hadapi, yang membuat saya menanyakan pertanyaan ini:
Add correct host key in /home/wissen16/.ssh/known_hosts to get rid of this message.
Offending key in /home/wissen16/.ssh/known_hosts:1
RSA host key for foo.com has changed and you have requested strict checking.
Host key verification failed.
Original contents retained as /Users/nha/.ssh/known_hosts.old
anggap itu sama untuk Ubuntu).ssh-keygen -R [ssh.sssshh.com]:1234
Ya, Anda dapat menghapus hanya satu kunci. Cukup buka di editor dan hapus baris yang menyinggung. Nomor setelah titik dua dalam pesan kesalahan adalah nomor baris, jadi itu baris yang akan dihapus - baris 1 dalam contoh Anda ..
sumber
Saya baru-baru ini mulai menggunakan kunci host, tetapi ketika saya telah mengacaukannya, biasanya satu kunci per baris jadi buat cadangan file dan hapus satu per satu sampai Anda menemukan yang tepat. Kemudian tambahkan yang lain kembali. Sedikit jalan panjang untuk melakukannya, tetapi harus berhasil.
Juga didasarkan pada kesalahan itu, dan tanpa tahu apa yang pernah terjadi, itu bisa menjadi kunci host pertama dalam file yang merupakan masalah sehingga buka file dengan vim
vim ~/.ssh/known_hosts
dan tekan
dd
lalu simpan.
sumber
Menggunakan ssh-keygen -R hostname tidak akan selalu berfungsi. Jika Anda memiliki versi SSH yang lebih baru yang "menyembunyikan" nama host untuk mencegah pembajakan ssh-agent, tampaknya ssh-keygen tidak dapat melepaskan nama host.
Sebagai contoh, saya memiliki host yang disebut build-node-01 dan saya telah terhubung dengannya dan menerima kuncinya. Saya kemudian membangunnya kembali dari awal, mendapatkan sidik jari host baru dan saya mencoba untuk menyambung kembali, saya akan mendapat peringatan bahwa ada konflik di jalur X (katakanlah 3). Saya berlari
ssh-keygen -R hostname
, tetapi saat berikutnya saya mencoba menghubungkan saya masih mendapat peringatan bahwa ada konflik. Saya memeriksa file hanya untuk menemukan bahwa nama host hash dan muncul sebagai[1] Bu4Ch@R@4D0M57uFF
bukannya nama host yang dapat dibaca.Dalam hal ini satu-satunya cara untuk berhasil menghapus host yang bersalah adalah dengan menggunakannya
Untuk mengambil langkah ini selangkah lebih jauh, Anda mungkin ingin membuat cadangan dari known_hosts jika Anda menghapus baris yang salah, dalam hal ini tambahkan saja .bak (atau ekstensi apa saja) ke opsi -i untuk membuat cadangan dengan itu perpanjangan. Menggunakan ssh-keygen melakukan ini secara otomatis.
sumber
ssh-keygen -R {hostname}
akan bekerja, bahkan ketika nama host 'disembunyikan' (hash). Tetap, ya, seseorang dapat menghapus entri dengan nomor (misalnya, entri ke-10 viased -i.bak 10d ~/.ssh/known_hosts
), tetapi itu biasanya tidak diperlukan. Bisa jadi port non-standar digunakan, dalam hal ini, Anda mungkin harus memformat perintah sebagai (note note):ssh-keygen -R '[hostname]:2222'
Sekedar berbagi jawaban bersih dan mudah yang baru saja saya temukan. Menghapus nama host tidak cocok untuk saya, karena file known_hosts di-hash. Namun, saya BISA secara manual mengedit entri host berdasarkan nomor baris dalam pesan kesalahan. Seperti dicatat oleh Mike Scott sebelumnya, nomor baris nama host yang menyinggung ada di pesan kesalahan.
Atau, saya bisa melakukan ini. Dari sini: cara memperbaiki kunci yang menyinggung di file ssh known_hosts
Saya mendapat sedikit cli magic ini
Ganti x dengan nomor baris, dan voila. Dia juga menawarkan jawaban perl jika sed tidak akan berfungsi.
sumber
Dalam hal ini, 10.20.120.211 adalah host yang ingin saya hapus dari file known_hosts saya, pastikan Anda keluar dari karakter khusus seperti (.)
sumber
ssh-keygen -R ...
(lebih disukai); atau,sed
dengan nomor baris tertentu untuk dihapus. Juga, untuksed
menggantikannya, gunakan-i' option; e.g.,
sed -i.bak 10d ~ / .ssh / known_hosts` untuk menghapus baris ke-10, dan (secara opsional) menyimpan dokumen asli dalam file cadangan yang diakhiri dengan suffixed.bak
.Anda dapat menghindari menghapus host tertentu dengan memperbaruinya:
Dengan cara ini Anda tidak perlu terhubung lagi ke host.
sumber