SSH, sık sık değiştirilen IP'ye sahip bir kutuya


22

IP'lerini sık sık değiştiren bazı bulut kutularım var.

Ana bilgisayar adını kullanarak ssh ama bu hata iletisi nedeniyle sunucu her başlattığında known_hosts dosyasını düzenlemek zorunda:

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

Herhangi bir güvenlik riskinin yanı sıra ne yapmak istediğimle ilgili olanların yanı sıra, bu hatayı yok saymanın veya bilinen_hosts dosyasının üzerine yazmamı sağlayacak şekilde otomatik olarak üzerine yazmanın bir yolu var mı?

Yanıtlar:


20

Ssh_config dosyanızı düzenleyin ve bu satırı değiştirin:

CheckHostIP no

CheckHostIP varsayılanları 'evet' olarak ayarlanmıştır. Bunun yaptığı şey, sadece başarısız olduğun türde bir çek yapmak. Kapatılması, sadece IP değişkeninin güvendiği ve ana bilgisayar adına karşı anahtar kontrolü yapacakları anlamına gelir.


2
Bu , bağlanacağınız tüm sunucular için bir güvenlik özelliğini devre dışı bırakır ; bu da son derece kötü bir uygulamadır. Bunun yerine bu seçeneği yalnızca belirli bir ana bilgisayar için bu sorunun olacağını bildiğiniz belirli bir ana bilgisayar için kullanmalısınız - ya da HostKeyAlias ​​seçeneğini - tekrar kullanmalısınız.
zaTricky

@zaTricky "Son derece kötü bir uygulama"? Bunun nesi böyle aşırı? Bence bu kadar güvenli, sadece kişisel bir tercih. Sadece bir anasisteme anahtar atamak (IP yerine). Https için HPKP benzer şekilde çalışır ve herkes ya güvenli ya da aşırı güvenli olduğunu söyler.
kubanczyk

@kubanczyk Bunu küresel bir ortam haline getirdiğini söylüyor - belirttiğim bir ev sahibi belirleme konusunda tavsiyede yok
zaTricky

25

Ekleme: Yalnızca bu adın CheckHostIP kontrolünü devre dışı bırakmayı deneyebilirsiniz :

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no

5
IP denetimini devre dışı bırakmanın güvenlik etkisini azaltmak için en iyi seçenek budur.
Espo

3

Buradaki cevapların çoğu işe yarayacak - fakat teknik olarak geçici çözümler. OpenSSH zaten bir dahili içinde bu düşünce ile özellik: HostKeyAlias.


.Ssh / config dosyanızda HostKeyAlias <alias>bir ana bilgisayar yapılandırmasına ekleyin :

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

Bu yerinde, sunucuya bağlanmak , yerel başvuru için myserver.example.comana bilgisayar adını veya IP adresini kullanmaz; bu sunucuya bağlanırken her zaman yalnızca verilen HostKeyAlias ​​öğesini kullanır. Benim için hostname kullanmak mantıklı - ama elbette istediğiniz diğer takma adları kullanabilirsiniz.


Dinamik ana bilgisayarlar için kendim için tipik yapılandırmalar şöyle:

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

Bu aynı zamanda sizin sunucuların bir demet aynı ana tuşları var tanıdığım bazı karanlık senaryolarda kullanılabilir (genelde bu olmalıdır değil durum). Bu daha sonra tekrarlanan girişleri önler. Gelecekte, anahtarlar yasal olarak değişirse, birden çok girişi değiştirmek / silmek zorunda değilsiniz. Sadece bir. Gitlab Geo sunucuları buna iyi bir örnektir.


Known_hosts dosyasını silme ile ilgili olarak, bilinen known_hosts girişlerini koruma / kaldırma ile ilgili diğer sorulara / cevaplara bakmanızı öneririm. Örneğin, bkz. .Shsh / known_hosts dosyamı nasıl yönetirim ; Özellikle user1953828 adlı kullanıcının yanıtından çok etkilendim, ancak çok fazla oy hakkı olmadığını gördüm. :)


Bu aynı gün cevabın SO üzerinde ne kadar değerli olduğunu ve doğru cevabın 8 yıl sonra cevaplandığını göstermektedir.
parite3

2

Bu problemi çözmek için bu tehlikeli seçenekleri kullanıyorum. (Ana bilgisayarımın genel anahtarı oldukça sık yenileniyor. Bu nedenle IP ve Anahtar denetimi kaldırılıyor)

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

Bunu, Anahtar aynı kalır ancak IP değişirse de kullanabilirsiniz:

ssh remoteServerName -l username -o "CheckHostIP=no"

Sunucunuz sık sık ana bilgisayar anahtarlarını değiştirirse, ana bilgisayar anahtarı imzalamayı ayarlamayı düşünmelisiniz
Cameron Tacklind

1

Uyarıyı yok saymak için StrictHostKeyChecking = no'yu ssh istemci yapılandırmanızda (yani bağlandığınız makinedeki ~ / ssh / config dosyası) ayarlayabilirsiniz .


1

Sen koyabilirsiniz CheckHostIP nosenin içine ~/.ssh/configdosyası, ama bu yapraklar sen aldatıp saldırılara açın. Bundan endişe duymuyorsanız, bu ayar known_hostskontrolü kapatmalıdır .


0

known_hostsGeçici AWS makinelerine bağlanırken dosyama parmak izlerini eklemekten kaçınıyorum . Gibi bir komut kullanıyorum

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem ec2-user@10.0.0.5

Onlara bağlanmak için Makineyi “bilinen ana bilgisayar listesine” eklemek isteyip istemediğiniz sorulmaz. 10.0.0.5Makinenizin IP adresiyle ve secret.pemSsh anahtarınızın tam yoluyla değiştirin. Hala 10.0.0.5eklenmiş olduğu konusunda uyarılar alacaksınız , ancak gerçekten de ortadan kayboldu /dev/null. Bunu sık sık yapıyorum, takma isimler takma ismini koymam~/.profile

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

Ben rezerv ssh ec2-user@example.commakineleri için tip komutları ben parmak izini kontrol sorun gitti vardı.


Bu, yalnızca bir kez bağlandığınız sunucular için anlamlı olur - ancak eski girdilerden kurtulmanın daha iyi yolları vardır - ve bilinen_hosts dosyanızın ne kadar kirli olduğu konusunda endişelenmemelisiniz. Muhtemelen, bu takma adı oluşturmak için takma adı size kazandırdığı değerden daha fazla zaman ve enerji harcadınız.
zaTricky

-2

Bilinen_host'ları salt okunur yap.


Pragmatik seçenekler kolayca mevcut olduğunda bu işlevsellik kırılır. : - /
zaTricky
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.