Mengapa SSH menambahkan entri known_host untuk alamat IP?

18

Saya memiliki host yang bernama nms.example.org. Di saya, /etc/ssh/ssh_known_hostssaya punya entri untuk tuan rumah dengan kunci RSA. Entri ini, dan semua entri lainnya dikelola oleh sistem manajemen konfigurasi saya.

nms.example.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZqfmVPs/XqTS...

Saya juga punya entri di saya /etc/ssh/ssh_configuntuk host tertentu yang mengatur alias host key. Yang jika saya mengerti semuanya dengan benar, ini berarti hanya yang nms.example.orgharus penting.

Host nms.example.org nms.example nms
    HostKeyAlias nms.example.org
    HostName nms.example.org

Lalu mengapa, ketika saya terhubung dari klien apakah ssh tampaknya masih berpikir perlu menambahkan kunci ke dikenal_hosts per-pengguna saya dengan IP host?

$ ssh nms -v
OpenSSH_6.0p1 Debian-4+deb7u4, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /home/zoredache/.ssh/config
debug1: /home/zoredache/.ssh/config line 61: Applying options for *
debug1: /home/zoredache/.ssh/config line 71: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 84: Applying options for nms
debug1: /etc/ssh/ssh_config line 363: Applying options for *
debug1: Connecting to nms.example.org [104.236.190.144] port 22.
debug1: Connection established.
debug1: identity file /home/zoredache/.ssh/zoredache-20140204.id_rsa type 1
...
debug1: Server host key: RSA 6b:5f:b6:e9:13:c3:b7:39:1e:ec:74:05:33:64:4d:5e
debug1: using hostkeyalias: nms.example.org
debug1: Host 'nms.example.org' is known and matches the RSA host key.
debug1: Found key in /etc/ssh/ssh_known_hosts:104
Warning: Permanently added the RSA host key for IP address '192.0.2.144' to the list of known hosts.
debug1: ssh_rsa_verify: signature correct
...

SSH tahu bahwa host saya valid (Lihat Host 'nms.example.org' is known and matches the RSA host key:) jadi mengapa ia menambahkan kunci untuk IP ke profil pengguna?

Ini sangat menjengkelkan, karena ketika saya menginstal ulang mesin, sistem manajemen konfigurasi saya menangani mengumpulkan dan mendistribusikan kunci host ke semua sistem dengan baik. Tetapi akan ada sisa kunci yang saling terkait yang terkait dengan IP ini dalam penggunaan-dikenal file host yang menyebabkan peringatan pada upaya koneksi yang mencegah skrip dari menghubungkan.

$ ssh nms -v
OpenSSH_6.0p1 Debian-4+deb7u4, OpenSSL 1.0.1e 11 Feb 2013
...
debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u4
debug1: using hostkeyalias: nms.example.org
...
debug1: Server host key: RSA 6b:5f:b6:e9:13:c3:b7:39:1e:ec:74:05:33:64:4d:5e
debug1: using hostkeyalias: nms.example.org
debug1: Host 'nms.example.org' is known and matches the RSA host key.
debug1: Found key in /etc/ssh/ssh_known_hosts:104
Warning: the RSA host key for 'nms.example.org' differs from the key for the IP address '192.0.2.144'
Offending key for IP in /home/zoredache/.ssh/known_hosts:25
Matching host key in /etc/ssh/ssh_known_hosts:104
Are you sure you want to continue connecting (yes/no)?

Bagaimana saya bisa mencegah ssh dari caching nilai per-IP ini di setiap pengguna known_hosts? Atau adakah alasan keamanan mengapa saya harus hidup dengan perilaku yang menjengkelkan ini? Ini juga membuat saya frustasi karena beberapa server memiliki alamat IP yang agak dinamis. Manajemen konfigurasi saya menangani pembaruan DNS. Tapi saya mendapatkan kunci host per-IP yang tersisa ini mengisi file-file yang dikenal dengan saya per-pengguna.

Sakit kepala
sumber

Jawaban:

22

Saya pikir ini untuk membuat CheckHostIPpekerjaan.

Jika flag ini diset ke “yes”, ssh (1) juga akan memeriksa alamat IP host dalam known_hostsfile. Ini memungkinkan ssh untuk mendeteksi jika kunci host diubah karena spoofing DNS. Jika opsi ini diatur ke "tidak", centang tidak akan dieksekusi. Standarnya adalah "ya".

Anda mendapatkan diagnostik yang sedikit lebih baik jika terjadi kesalahan konfigurasi atau serangan dengan opsi ini, tetapi sebenarnya tidak meningkatkan keamanan dengan cara apa pun yang dapat saya pikirkan.

Jika Anda mematikan CheckHostIPmaka SSH (pada OpenSSH 6.7p1) tidak mencatat alamat IP ketika Anda terhubung ke host baru dengan nama. Jadi tambahkan ini ke .ssh/config:

CheckHostIP no

Anda dapat menambahkannya ke Hostbagian jika Anda hanya ingin mematikannya untuk host tertentu (terutama yang dengan alamat IP dinamis).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Yup, ini pengaturan yang saya butuhkan.
Zoredache
Sementara saya setuju dengan semua yang Anda katakan @Gilles, secara teknis saya akan (demi diskusi yang baik) mengatakan bahwa CheckHostIP yes tidak meningkatkan keamanan ... JIKA pengguna tahu persis apa yang dilakukannya, bagaimana sistem menggunakan parameter ini, dan konsep kepercayaan tersirat. Jadi, saya benar-benar akan membelah rambut, yang tidak akan saya lakukan ... Saya akan menyimpannya untuk keamanan-se;)
0xSheepdog