Birkaç ana bilgisayar aynı IP ve DNS adını paylaştığında known_hosts nasıl düzenlenir?


29

Düzenli olarak çift önyüklemeli OS X / Linux bilgisayarı olan bir bilgisayara ssh. İki işletim sistemi örneği aynı ana bilgisayar anahtarını paylaşmaz, bu nedenle aynı IP ve DNS'yi paylaşan iki ana bilgisayar olarak görülebilirler. Diyelim ki IP 192.168.0.9ve isimler hostnamevehostname.domainname

Anladığım kadarıyla, iki ana bilgisayara bağlanabilmenin çözümü, her ikisini de ~/.ssh/know_hostsdosyaya eklemektir . Ancak, daha kolay dosya karma, çünkü yapılır ve ana bilgisayar başına muhtemelen birkaç giriş olduğundan daha söylenir ( 192.168.0.9, hostname, hostname.domainname). Sonuç olarak, aşağıdaki uyarıyı aldım.

Warning: the ECDSA host key for 'hostname' differs from the key for the IP address '192.168.0.9'

known_hostsKarmaları tutarken dosyayı düzenlemek için kolay bir yol var mı . Örneğin, verilen bir hostame karşılık gelen hatları nasıl bulabilirim? Bilinen bazı ana bilgisayarlara ilişkin karmaları nasıl oluşturabilirim?

İdeal çözüm bana olursa olsun diyoruz, ister ssh'ın ile bu bilgisayara sorunsuz bağlanmasına izin olurdu 192.168.0.9, hostnameya hostname.domainname, ne de onun Linux konak anahtarı veya OSX konak anahtarı kullanıyorsa. Ancak, ortadaki gerçek bir saldırı olursa , yani bu ikisinden başka bir anahtar kullanılıyorsa , hala bir uyarı almak istiyorum .


Ne yapmak istiyorsun? Ne için düzenledin?
Rhyuk

@Rhyuk: IP adresi, ana bilgisayar adı ve ana bilgisayar adı.alan_adı adı için hem OSX hem de linux ana bilgisayar anahtarını geçerli olarak tanıması için düzenleyin.
Frédéric Grosshans

@ Rhyuk: Bu soruyu düzelttim. Şimdi daha açık mı?
Frédéric Grosshans

2
Her iki kurulumun da aynı anahtara sahip olduğunu düşündünüz mü?
Zoredache

3
Birden fazla varlığa (her biri tek tek SSH ana bilgisayar anahtarlarına sahip) erişmek için bir IP adresi kullanmanın makul olduğu birkaç durum vardır ve yine de SADECE bu ana bilgisayar anahtarlarının SSH istemcisi tarafından görülenler olduğu konusunda sıkı bir kontrol sağlamaya devam edin. Örneğin, bir paylaşılan IP adresi kullanarak bir birime kümeye erişildiği, ancak istemciler tarafından görülen SSH ana bilgisayar anahtarının şu anda hangi küme biriminin etkin olduğuna bağlı olarak değiştiği bazı yüksek kullanılabilirlik ayarları. Başka bir durum, birden fazla SSH ana bilgisayarının NAT güvenlik duvarının arkasında olduğu ve dışarıdan erişildiği zaman, hepsinin aynı IP’ye sahip olduğu görülüyor.
IllvilJa,

Yanıtlar:


12

Buradaki en basit çözüm, Linux ve OS X için aynı ana bilgisayar anahtarlarını kullanmaktır. Yani, bir /etc/ssh/ssh_host_*_key*dosya grubunu seçin ve diğer işletim sistemine kopyalayın. Ardından, aynı ana bilgisayar anahtarı, hangi işletim sistemine girdiğinize bakılmaksızın bir SSH istemcisine sunulacak ve SSH istemcisi daha akıllıca olmayacaktır.


Bir istemci sürümünü tercih ederdim, ancak bir tane bulamazsam bunu deneyeceğim. Bu arada, dosyaların OSX (standart dışı) yerelleştirilmesi /private/etc/ssh_host*değil /etc/ssh/ssh_host*.
Frédéric Grosshans

Dosyaları bir makineden diğerine (iki linux makinesi) kopyalamak benim için işe yaramadı. Her ne kadar dosya içerikleri aynı olsa da karma değildi, o yüzden hala problemi alıyorum (belki de değişiklik zamanı?). Aşağıdaki çözüm çok daha iyi.
Stav

sshdyükleri başlangıçta bir kez ev sahibi anahtarlarını, yeniden başlatma için büyük olasılıkla gereksinim duyacağınız bu yüzden sshd. Bunu cevaba ekleyeceğim. Diğer çözümlerin daha iyi olmasına gelince, durumunuza bağlıdır. Bu yöntemin en büyük avantajlarının sadece bir defalık kurulum gerektirdiğini ve birden fazla SSH istemcisi uygulamasıyla çalışmanın daha muhtemel olduğunu savunuyorum.
jjlin 19

İlginç bir şekilde, göreceli olarak yeni olan OpenSSH 7.4p1 sshd, her yeni bağlantıda ana bilgisayar anahtarları yüklüyor. Belki de uzun zamandır böyle olmuştur ve sadece ana bilgisayar anahtarlarına başka bir sshdyapılandırma gibi davranıldığını varsaydım . Her neyse, bu senin sorunun olabilir veya olmayabilir.
jjlin 19

Bunu, aynı VRRP adresini paylaşan bir kümedeki iki ana bilgisayara yapmak kötü bir fikir olur mu? Yük devretme sırasında, yanıt veren ana bilgisayar farklı olacaktır. Uyarı almak istemiyorum.
Colin 't Hart

26

@Izzy'nin yukarıdaki yorumda önerdiği gibi, ssh size rahatsız edici hattı söyler ve bu satırı kaldırarak (başka bir yere kaydederek), yeni anahtarı kabul eder ve sonra kaldırılan çizgiyi tekrar kopyalayarak, aynı tuş için iki anahtarla kapatırsınız. ev sahibi ve ssh da kabul eder.

(Ayrıca ssh-keygen -H -F <hostname>, bilinen ana bilgisayar dosyanızdaki bu ana bilgisayar adıyla eşleşen satırları bulmak için de kullanabilirsiniz . Kaldırılan satırı geri kopyaladıktan sonra bu işlemi iki giriş listelenmelidir.)

PuTTY'nin aynı şeyi yapmasını nasıl bilen varsa, bunu duymayı çok isterim.


4
Aslında bir linux istemciniz varsa, rahatsız edici çizgiyi kaldırmanız bile gerekmez, sadece önünde bir karma ('#') karakteriyle yorum yapmanız gerekir. Ardından, yeni anahtarı kabul ettikten sonra, known_hosts dosyasını düzenleyebilir ve satırın eski anahtarla bağlantısını kaldırabilirsiniz. Ama evet, bu Macunda da faydalı olacaktır.
IllvilJa

1
Aynı adda, ancak farklı IP adreslerine ve farklı ana bilgisayar anahtarlarına sahip iki ana bilgisayar varsa, bu geçici çözüm de şu şekilde çalışır: Bu ana bilgisayarın her iki satırı (IP adresini temel alan ve ana bilgisayarı temel alan bir yorum) (veya geçici olarak silin) name), henüz bilinmeyen ana makineye bağlanın ve yorumlanan veya silinen satırları yeniden ekleyin.
Kai Petzke

13

Bunu başarmak istediğiniz şey konusunda size yardımcı olabilecek buldum.

Kaynak: /programming/733753/how-to-handle-ssh-host-key-verification-with-2-different-hosts-on-the-same-but

.Ssh dizininizde aşağıdaki gibi bir config dosyası oluşturun:

Host server1
  Hostname x1.example.com
  HostKeyAlias server1
  CheckHostIP no
  Port 22001
  User karl

Host server2
  Hostname x2.example.com
  HostKeyAlias server2
  CheckHostIP no
  Port 22002
  User karl

Aşağıda Açıklama (man ssh_config kullanıcısından)

CheckHostIP

Bu bayrak "evet" olarak ayarlanmışsa, ssh (1) ayrıca bilinen ana bilgisayardaki IP adresini de kontrol eder. Bu, ssh'nin DNS sahteciliği nedeniyle bir ana bilgisayar anahtarının değişip değişmediğini tespit etmesini sağlar. Seçenek "hayır" olarak ayarlanmışsa, kontrol yapılmayacaktır. Varsayılan "evet" dir.

HostKeyAlias

Ana bilgisayar anahtarını ana bilgisayar anahtar veritabanı dosyalarına ararken veya kaydederken gerçek ana bilgisayar adı yerine kullanılması gereken bir diğer adı belirtir. Bu seçenek SSH bağlantılarının tünellenmesi veya tek bir ana bilgisayarda çalışan birden fazla sunucu için kullanışlıdır.

Kullanıcı adı ve Bağlantı Noktası satırı, bu seçenekleri komut satırında da vermenizi önler, böylece yalnızca şunları kullanabilirsiniz:

% ssh server1
% ssh server2

Bu makaleyi gördüm, ancak bu durumumla uyuşmuyor: iki sunucu makalemdeki bağlantı noktası numarasıyla değil, durumumla ayırt ediliyor. Dahası, ben de tuzlu hash getirdiği ek güvenlik katmanları kalmasını isterim known_hostsve CheckHostIP.
Frédéric Grosshans

1
@ FrédéricGrosshans, kontrol ettim. Ayrı bağlantı noktalarına sahip olmanız gerekmez ve HashKnownHosts seçeneği HostKeyAlias ​​ile iyi çalışır.
Zoredache

Bunun yanlış tarafı, yanlış olmadığım sürece, müşteri bazında, vs kabul edilen cevap ise sadece kabul eden ssh sunucularında yapılandırılmış.
ÜcretsizYazılımServisler

2

Sorununuzu çözmenin en kolay yolu, her ana bilgisayara kendi / ayrı bir IP adresi vermektir. (Özel) ağınızda ve IPv4'ünüzde mevcut 253 adres olması önemli değil. Onlara sabit IP'ler verin (bir DHCP sunucusu makineyi ağ kartları MAC adresine göre tanımlayacak ve her ikisi de aynı adresi alacaktır). Güvenlik önlemlerini (bu küçük "konfor" için de bırakmayacağım) tutmak istiyorsanız başka bir çözüm göremiyorum.


Aslında IP adresi 192.168.0.xxözel değildir ve özel değildir. Üniversitemce verilen ve değiştirmekte özgür olmadığım 'gerçek' bir IPv4 adresi.
Frédéric Grosshans

Vikipedi ile kontrol ederseniz, 192.168.0.0 - 192.168.255.255 (bu aralığa giren, 192.168.0.9 tarafından belirtilen sorunuz) "Özel IPv4 adres alanlarına" ait olduğunu göreceksiniz. Bu yüzden "özel" derken, size "sahip" olduğunu söylemedim, ama IETF'in özelliklerine . Sorunuzda IP’yi değiştiremeyeceğinizi belirtmediniz, üzgünüm - ancak verilen girdiyle cevabım uyguntu.
Izzy,

Kötü ifade edilen soru için üzgünüm. Oy kullanmadım
Frédéric Grosshans

Hiçbir prob ve bana bildirmek için tnx - aşağı oy daha az cesaret kırıcı yapar. Ancak başka bir fikir: known_hosts dosyasının ana bilgisayar adını DNS'in tersine veya müşterinin sunduğu yerden aldığından emin değilim. Farklı bir ana bilgisayar adı sunmak için "ana bilgisayarlarınızdan" birini yeniden adlandırmayı deneyebilirsiniz. Veya her iki ana bilgisayar anahtarının da eklenmesi için: ssh, known_hosts dosyanızdaki "rahatsız edici satırı" söyler (# 1 içerdiğinde ve # 2 ile bağlandığınızda). Böylece, bu satırı başka bir dosyaya kopyalayabilir, bilinen_host'lardan kaldırabilir, # 2'nin bağlanıp hattını ekleyebildiğini ve kaldırılan satırı geri ekleyebildiğinizi görebilirsiniz. İşe yaradığından emin değilim, ama deneyebilirsiniz.
Izzy,

2

Aynı IP'yi paylaşan çeşitli VPS kutularına bağlanırken bu sorunla karşılaşmam, çünkü her birinin farklı bir SSH bağlantı noktası (20022,30022, vb.) Vardır, böylece farklı anahtarlarla bilinen ana bilgisayarlar olarak kaydedilirler.

Bu sizin için bir geçici çözüm olabilir mi?


Merhaba @Pyheme, Süper Kullanıcıya Hoşgeldiniz! Bu sorunun neredeyse 4 yaşında olduğuna dikkat edin. Cevaplamanın yanlış bir tarafı yok, ancak bir cevap alamayacağınızın aklınızda bulundurun.
Hewbot

Artık herhangi bir OS X makinem yok, ancak cevabınız başkaları için yararlı olabilir. Tüm borsa değişim noktası budur
Frédéric Grosshans

@Howbot ... gerçekten, şimdi görüyorum. Neden bilmiyorum, son sorular listesinde ortaya çıktı ...
Pyheme

1

Sorununuzu çözmenin birkaç yolunu açıklayan başka bir makale :

İkinci yöntem iki openSSH parametresi kullanır:, StrictHostKeyCheckinve UserKnownHostsFile. Bu yöntem, SSH'yi boş bir bilinen_hosts dosyasını kullanacak şekilde yapılandırarak ve uzak ana bilgisayar kimlik anahtarını onaylamanızı istemek için TIKLAYIR.


Bu yazı, anahtar kontrolüne izin vermemekle ilgilidir. Anahtar denetimini sürdürmek istiyorum ve her seferinde hostnameLinut veya OSX’e yeniden başlatılmasını yasaklamak istemiyorum
Frédéric Grosshans

1
Süper Kullanıcıya Hoşgeldiniz! Bu soruyu teorik olarak cevaplayabilse de , cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak tercih edilir. Kısa bir bölüm
ekledim

1

Sıkı ana bilgisayar anahtarını denetlemeye devam etmek istediğiniz için, farklı known_hostsdosyalar kullanmalarını isterdim . Bunu yapmak için, ~/.ssh/configdosyanızı (ya da /etc/ssh/ssh_configbirden fazla yerel kullanıcı hesabı üzerinde çalışmak için buna ihtiyacınız varsa) aşağıdaki gibi ayarlayın:

Host myserver.osx
  UserKnownHostsFile ~/.ssh/known_hosts.dual.osx
  # default is ~/.ssh/known_hosts
  Hostname $REALHOSTNAME

Host myserver.linux
  UserKnownHostsFile ~/.ssh/known_hosts.dual.linux
  Hostname $REALHOSTNAME

$REALHOSTNAMETabii ki, asıl ana bilgisayar adı veya IP adresi ile değiştirme . (IP adresi için çözülecek olan "Ana Bilgisayar Adı" ndan sonra bir şeyi seçtiğiniz sürece, hangisini seçtiğiniz önemli değildir, ancak ana bilgisayar adını bir IP adresi yerine, sadece genel ilkelere göre kullanırım.)

Sonra ssh myserver.linuxve ssh myserver.osxböylece farklı ana bilgisayar anahtarlarına sahip olabilirsiniz, ancak yine de kontrolü alıyorsunuz. Eğer bu Linux ise ve siz OS X (ya da tam tersi) yazıyorsanız, uyarının (istenen etki olduğuna inanıyorum) anlayacaksınız.

Bu sorunu yaşarsam, ana known_hostsdosyada her ikisiyle de eşleşmeyen tamamen yanlış bir şey olduğundan emin olurdum , böylece yazmak $REALHOSTNAMEyerine myserver.osxuyarı alırsınız. :-) Bunu gibi bir şey koyarak yapardım

<ip-address-of-github.com> $REALHOSTNAME

benim /etc/hosts, sonra bir yapmak ssh $REALHOSTNAMEve yeni anahtarı kabul etmek, daha sonra bu girişi çıkarmak.

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.