Abaikan sementara file `~ / .ssh / known_hosts` saya?

48

Apakah ada cara untuk sementara waktu mengabaikan ~/.ssh/known_hostsfile saya ?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 

CATATAN:

.. oleh beberapa jawaban (s) / komentar (s) saya menyadari bahwa pertanyaan saya agak menyesatkan, begitu singkat itu perilaku yang diharapkan), jadi itu normal (dalam kasus saya) ada alasan yang valid di baliknya mengapa saya ingin melihat "abaikan saja")

alexus
sumber
9
Anda mengajukan pertanyaan yang salah. Anda seharusnya tidak "mengabaikan" masalah; Anda harus mencari tahu apa yang sedang terjadi dan menyelesaikannya.
Michael Hampton
9
Saya tidak dapat berbicara untuk pengguna, tetapi satu contoh akan menjadi situasi di mana Anda mengembangkan proses pemasangan otomatis (seperti kickstart), di mana alur kerja berulang Anda melibatkan membangun, menghubungkan, menguji, memodifikasi proses pembangunan, dan membangun kembali dari garuk berulang-ulang.
Goladus
10
@MichaelHampton - Saya mendapatkan ini sepanjang waktu karena VMware dan VirtualBox mendaur ulang alamat IP untuk para tamu. Bagi saya, ini adalah pertanyaan yang benar :)
1
FWIW Saya terus mencari jawaban ini karena saya memiliki sistem di LAN saya di mana saya menggunakan dropbear (dengan kunci host berbeda) untuk memasukkan kata sandi enkripsi disk saat startup.
Zulan
1
@ jww Ini adalah pertanyaan / solusi yang salah untuk skenario Anda. Sebaliknya Anda harus mengonfigurasi SSH untuk mengabaikan alamat IP tetapi masih memeriksa kunci host. Lihat misalnya di sini
Jon Bentley

Jawaban:

56

Anda dapat menggunakan ssh -o StrictHostKeyChecking=nountuk mematikan memeriksa known_hostssebentar. Tapi saya menyarankan hal ini. Anda harus benar-benar memeriksa mengapa kunci host telah berubah.

Pilihan lain adalah menambahkan entri khusus ke ~/.ssh/confighost Anda yang bersangkutan. Ini mungkin pendekatan yang valid jika Anda memiliki host tertentu yang menghasilkan kunci host baru setiap kali reboot dan reboot untuk alasan yang sah beberapa kali sehari.

Host <your problematic host>
  StrictHostKeyChecking no
Sami Laine
sumber
itu perilaku yang diharapkan) jadi itu normal (dalam kasus saya)
alexus
1
@alexus Jika "diharapkan", maka Anda dapat menerapkan opsi ke nama host / IP tertentu yang Anda harapkan terjadi.
chrylis -on strike-
1
@alexus Dan ingat bahwa jika Anda melakukan ini, Anda kehilangan banyak perlindungan yang disediakan ssh. Anda mungkin juga menggunakan telnet, karena itu akan sepele bagi seseorang untuk MITM Anda dan menangkap semua lalu lintas Anda.
Michael Hampton
1
Ini tidak lagi berfungsi (setidaknya untuk OpenSSH_5.3p1)
draeath
-o StrictHostKeyChecking=nomenghapus kemampuan untuk masuk dengan kata sandi. Bukankah kurangnya bendera untuk ini secara langsung bertentangan dengan prinsip unix yang memungkinkan pengguna untuk memaksakan perilaku? Saat ini saya mencoba masuk ke mesin lokal dengan IP lokal. Kunci host berubah karena saya memformat ulang kata mesin. Semua yang ada di sini masuk akal dan tidak ada risiko keamanan dalam situasi ini.
Wowfunhappy
31

Untuk sepenuhnya mengabaikan file host yang dikenal di lingkungan POSIX, setel opsi GlobalKnownHostsFiledan UserKnownHostsFileke /dev/null:

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

Mengatur StrictHostKeyChecking=noopsi akan memungkinkan Anda untuk terhubung tetapi SSH masih akan menampilkan peringatan :

ssh -o StrictHostKeyChecking=no user@host

Seperti yang telah dicatat oleh orang lain, mungkin lebih baik untuk mengatasi masalah yang mendasarinya. Anda dapat mempertimbangkan otentikasi sertifikat SSH untuk memverifikasi host, misalnya.

MattB
sumber
2
Ini bisa menjadi jawaban yang lebih baik daripada yang tertinggi saat ini karena memungkinkan untuk menggunakan otentikasi kata sandi yang akan dinonaktifkan jika tidak (tentu saja, Anda harus memahami apa yang sebenarnya Anda lakukan sebelum mengetikkan kata sandi ...)
VZ.
Saya sedikit bingung di sini: tidak harus Anda juga menggunakan -o StrictHostKeyChecking=no selain itu -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/nullpilihan - untuk jawaban akhir dari?: ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host?
Gabriel Staples
Tulisan
Gabriel Staples
5

Jika Anda telah menginstal ulang server dan karena itu Identifikasi telah berubah, Anda hanya perlu menghapus baris yang ditentukan dari 155 /Users/alexus/.ssh/known_hostsdan lanjutkan.

Jika Anda beralih di antara jaringan pribadi yang berbeda, Anda harus menggunakan nama host untuk terhubung sebagai gantinya, karena klien ssh juga akan menyimpan kunci tergantung pada nama host. Tambahkan sesuatu seperti ini ke /etc/hosts:

10.52.11.171 server1
10.52.11.171 server2

dan kemudian gunakan ssh server1ketika terhubung ke subnet 1 dan ssh server2ketika terhubung ke subnet2. Dengan cara ini, kedua server dapat memiliki host host yang berbeda.

etagenklo
sumber
Bagaimana jika Anda beralih di antara dua jaringan pribadi dan terhubung ke dua IP yang sama?
alexus
1
Saya sudah mengedit jawaban saya.
etagenklo
2
@alexus Maka Anda memerlukan IPv6 :) Tapi itu akan menjadi informasi yang berguna dalam pertanyaan awal Anda.
Michael Hampton
2

-o StrictHostKeyChecking=no hanya berfungsi jika host belum ada dalam file known_hosts.

Saya pikir ini lebih bersih (tidak ada peringatan), jika Anda mengharapkan kunci host untuk berubah mungkin karena vm kloning, untuk menegakkan mengabaikan jenis host seperti ini:

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"
Jose Sa
sumber
2

Beberapa orang mengatakan itu tidak benar, Anda tidak perlu melakukan ini dan seterusnya, tetapi saya perlu ini juga untuk menguji beberapa perangkat yang tertanam berulang-ulang. Anda perlu menonaktifkan StrictHostKeyChecking=no, ini benar, tetapi juga mengatur ulang file host yang dikenal /dev/null. Di sini contoh dengan autologin dan pspada perangkat jarak jauh.

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'
eddso
sumber
-2

Masuk ke semua server Anda, (dan jika RedHat) rm -f /etc/ssh/ssh_host_*kemudian mulai ulang SSHD.

Ini akan membuat kunci host SSH baru yang tidak perlu diabaikan.

Saya bisa memikirkan hanya satu contoh di mana kunci SSH dikloning pada beberapa server tidak hanya diinginkan tetapi juga tidak membuang peringatan. Kelipatan satu catatan A. Semua host dengan catatan A memiliki kunci yang sama.

Niels
sumber
6
Jawaban ini salah. Sidik jari bersifat lokal pada klien.
89c3b1b8-b1ae-11e6-b842-48d705