SSH menjadi kotak dengan IP yang sering diubah

22

Saya memiliki beberapa kotak cloud yang sering mengubah IP mereka.

Saya ssh menggunakan nama host tetapi harus mengedit file known_hosts setiap kali server diluncurkan karena pesan kesalahan ini:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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

Selain dari risiko keamanan dan yang terkait dengan apa yang ingin saya lakukan, apakah ada cara untuk mengabaikan kesalahan ini atau menimpa file yang dikenal secara otomatis sehingga saya tidak selalu harus mengeditnya sendiri?

Coneybeare
sumber

Jawaban:

20

Edit file ssh_config Anda dan tambahkan ubah baris ini:

CheckHostIP no

Default CheckHostIP adalah 'ya'. Apa yang dilakukan adalah melakukan jenis pemeriksaan yang gagal Anda lakukan. Mematikan artinya hanya percaya bahwa IP itu variabel, dan akan memeriksa kunci terhadap nama host.

sysadmin1138
sumber
2
Ini menonaktifkan fitur keamanan untuk semua server yang akan Anda sambungkan, yang merupakan praktik yang sangat buruk. Anda sebaiknya menggunakan opsi ini hanya untuk host tertentu yang Anda tahu akan mengalami masalah ini - atau menggunakan opsi HostKeyAlias ​​- lagi untuk host tertentu.
zaTricky
@zaTricky "Latihan yang sangat buruk"? Apa yang ekstrem tentang itu hmm? Saya pikir ini tentang aman, hanya preferensi individu. Anda cukup menyematkan kunci ke nama host (bukan IP). Untuk https, HPKP bekerja dengan cara yang sama dan semua orang mengatakan itu aman atau terlalu aman.
kubanczyk
@ kubanczyk Ini mengatakan untuk menjadikannya pengaturan global - tidak ada saran tentang menentukan host, yang saya tunjukkan
zaTricky
25

Selain itu: Anda bisa hanya coba nonaktifkan cek CheckHostIP untuk itu nama:

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no
Koos van den Hout
sumber
5
Ini adalah opsi terbaik untuk mengurangi dampak keamanan dari menonaktifkan pengecekan IP.
Espo
3

Banyak jawaban di sini akan berhasil - tetapi secara teknis mereka sedang mencari solusi. OpenSSH sudah memiliki built-in fitur dengan pikiran ini: HostKeyAlias.


Di file .ssh / config Anda, tambahkan HostKeyAlias <alias>ke konfigurasi host:

host myserver.example.com
HostKeyAlias myserver.example.com

Dengan ini, menghubungkan ke server myserver.example.comtidak akan menggunakan nama host atau alamat IP untuk referensi lokal - itu akan selalu hanya menggunakan HostKeyAlias ​​yang diberikan ketika menghubungkan ke server itu. Bagi saya masuk akal untuk menggunakan nama host - tetapi Anda tentu saja dapat menggunakan alias apa pun yang Anda suka.


Konfigurasi umum untuk saya sendiri untuk host dinamis adalah seperti ini:

host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com

Ini juga dapat digunakan dalam beberapa skenario yang tidak jelas di mana Anda tahu banyak server Anda memiliki kunci host yang sama (umumnya ini seharusnya tidak terjadi). Ini kemudian akan mencegah entri duplikat. Di masa depan, jika kunci berubah secara sah, Anda tidak perlu mengganti / menghapus banyak entri. Hanya satu. Server Gitlab Geo adalah contoh yang bagus untuk ini.


Mengenai membersihkan file diketahui_hosts, saya akan menyarankan melihat pertanyaan / jawaban lain yang secara khusus terkait dengan mempertahankan / menghapus entri known_hosts basi. Misalnya, lihat Cara mengelola file .ssh / known_hosts saya ; Saya sangat terkesan dengan jawaban user1953828, meskipun saya melihatnya tidak memiliki banyak upvote (belum). :)

zTricky
sumber
Ini menunjukkan berapa nilai jawaban pada hari yang sama pada SO vs jawaban yang benar, dijawab 8 tahun kemudian.
parity3
2

Saya menggunakan opsi cerdik ini untuk mengatasi masalah ini. (Kunci publik host saya diregenerasi cukup sering. Jadi ini menghilangkan IP dan cek Kunci)

ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"

Anda juga bisa menggunakan ini jika Kunci tetap sama tetapi IP berubah:

ssh remoteServerName -l username -o "CheckHostIP=no"
Zv_oDD
sumber
Jika server Anda sering mengganti kunci host, Anda harus mempertimbangkan mengatur penandatanganan kunci host
Cameron Tacklind
1

Anda dapat mengatur StrictHostKeyChecking = tidak di konfigurasi klien ssh Anda (yaitu file ~ / ssh / config pada mesin yang Anda hubungkan), untuk mengabaikan peringatan.

hayalci
sumber
1

Anda bisa memasukkan CheckHostIP noke dalam ~/.ssh/configfile Anda , tetapi itu membuat Anda terbuka untuk serangan spoofing. Jika Anda tidak khawatir tentang itu, maka pengaturan ini harus mematikan known_hostscek.

Steven Monday
sumber
0

Saya menghindari menambahkan sidik jari ke known_hostsfile saya ketika menghubungkan ke mesin AWS sementara. Saya menggunakan perintah seperti

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem [email protected]

untuk terhubung ke mereka. Ia tidak akan menanyakan apakah Anda ingin menambahkan mesin "ke daftar host yang dikenal." Ganti 10.0.0.5dengan alamat IP mesin Anda dan secret.pemdengan path lengkap dari kunci Ssh Anda. Anda masih akan mendapatkan peringatan bahwa 10.0.0.5telah ditambahkan, tetapi sudah benar-benar hilang /dev/null. Saya melakukan ini cukup sering sehingga saya menetapkan alias di blog saya~/.profile

alias awsssh='ssh -i secret.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Saya memesan ssh [email protected]jenis perintah untuk mesin jika saya kesulitan memeriksa sidik jari.

Hbar
sumber
Ini masuk akal untuk server Anda hanya pernah terhubung ke sekali - tetapi ada cara yang lebih baik untuk menyingkirkan entri basi - dan Anda tidak harus yang bersangkutan tentang bagaimana kotor known_hosts Anda file. Kemungkinan Anda telah menghabiskan lebih banyak waktu dan energi untuk menciptakan nilai alias itu daripada nilai yang diberikannya kepada Anda.
zaTricky
-2

Jadikan known_hosts hanya-baca.

Eldelshell
sumber
Ini merusak fungsionalitas ketika opsi pragmatis mudah tersedia. : - /
zaTricky