SSH için known_host'lara hostkey eklemeyin


111

SSH üzerinden bir ana bilgisayara bağlanmak istiyorum ancak ana bilgisayar adıma eklenmesi istemiyorum ~/.ssh/known_hosts.

Bunu nasıl yapabilirim?

Yanıtlar:


99
-o "UserKnownHostsFile /dev/null"

çalışmalı.


3
Amaçlandığı gibi çalışıyor, ancak her zaman rapor verecek: "Uyarı: Kalıcı olarak 'ana bilgisayar adı, ip' (RSA) bilinen ana bilgisayar listesine eklendi." Ben onunla gitmesini sağladım: 2> & 1 | grep -v "^Warning: Permanently added"
Guillaume Boudreau

3
ekle -o "LogLevel ERROR" ve artık Uyarılardan şikayet etmeyecek
John

1
Not: "Uyarı: Kalıcı olarak 'ana bilgisayar adı, ip' (RSA) bilinen ana bilgisayarların listesine eklendi." bakıcılara bugzilla.mindrot.org/show_bug.cgi?id=2413
Ben Creasy

2
Borular grepstdout ve stderr'yi birleştirecek; ayrıca çıkış durumu da değişebilir. Kullanılıyorsa bash, mesajın kurtulmak için süreç ikame kullanmak daha iyi olacaktır: ssh 2> >( egrep >&2 -v '^Warning: Permanently added') -o "UserKnownHostsFile /dev/null" [...]. Boruyu ve dolayısıyla çıkış durumu işlemesinde ilgili değişiklikleri önleyecektir.
Alex O,

1
@John Bu yorumlarda diğer yöntemlerden birini kullanmak daha iyidir, aksi takdirde diğer, ilgisiz uyarıları gizleme potansiyeli nedeniyle bir güvenlik açığı ortaya koyuyorsunuz
Jon Bentley

97

Bulut sunucusuyla (AWS EC2, Rackspace CloudServers vb.) Çalıştığınız için bu davranışı istiyorsanız veya Vagrant'ta sürekli olarak yeni görüntüler hazırlıyorsanız, SSH yapılandırmanızı bash takma adları veya daha fazla seçenek eklemek yerine güncellemek isteyebilirsiniz. Komut satırı.

Gibi bir şey eklemeyi düşünün:

Host *.mydomain.com 
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null
  User foo
  LogLevel QUIET
  • Güvenli olması için ana bilgisayar için regex kadar katı kullanın.
  • LogLevel'i QUIET olarak ayarlamak, Guillaume'in belirttiği Uyarıları saklayacaktır

Gerçekten StrictHostKeyChecking'i tamamen devre dışı bırakmamaya çalışmalısınız, bu yüzden cclark'ın cevabı bulut sunucularıyla çalışmak için harika bir uzlaşmadır.
Alex Recarey 24:12

Bu, Vagrant'a karşı Shipit (JavaScript dağıtım aracı) kullandığım için bana çok yardımcı oldu. Shipit’in SSH’ye geçirdiği parametreleri kolayca alamadım, bu yüzden aracı kullanmamı ve ne yaptığımı ve hatırlamasını istemediğimi söylememe izin verdi.
John Munsch

1
LogLevel aradığım şeydi. Komut dosyalarını çalıştırırken şirketin yapılandırılmış bildirimini göstermeme avantajı vardır! (Şu anda w / loglevel ERROR ile çalışıyorum)
Anshu Prateek

Bunu hangi dosyaya eklerim?
Wim Deblauwe

Bu sizin SSH yapılandırma dosyanızdır. Linux veya MacOS dosya genellikle ev dizinindeki .ssh adlı bir dizinde olacak ve config isimli - ~ / .ssh / config
cclark

8

Bilinen ana bilgisayarlarınıza ana bilgisayar anahtarını eklemek istiyorum (bu hizmetleri çalıştıranlar benim deneyimime göre, ana bilgisayar anahtarlarını aynı ana bilgisayar adına hizmet veren makineler arasında tutarlı tutacak kadar akıllıdır) ve sonra StrictHostKeyChecking, CheckHostIP özelliğini kapatıp, LogLevel ERROR ile oturum açmak, güvenlikten ödün vermeden size en iyi deneyimi sağlayacaktır. (Tamam, CheckHostIP olmadan, DNSSEC ya da benzeri yaygın bir şey olmayan büyük bir boşluk olan DNS'ye güvenmeniz gerekir; ancak şu an için halının altına bakacağız.)

Salt okunur bir known_hosts dosyası kullanıyorum, bu yüzden bir şeyler yapmam gerekiyor veya bilinen_host'lara giriş ekleyememe konusunda sonsuz uyarılar alıyorum.

Ne kullanıyorum:

Host github.com *.github.com
StrictHostKeyChecking yes
CheckHostIP no
LogLevel ERROR

Bu hizmetlerin SSH ana bilgisayar anahtarlarını HTTPS aracılığıyla web sitelerinde yayınlamasını istiyorum, bu nedenle ilk önce bağlantı kurmak zorunda kalmadan kendimi MITM saldırısına maruz bırakmadan açıkça kopyalayabilirim.


7

Tek bir ssh oturumu için bunu kullanın

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host

4
Bu, 5 yaşındaki bir soru için kabul edilmiş bir cevaba yeni bir şey eklemez.
JakeGould

5

öneririm

LogLevel ERROR

bitmiş

LogLevel QUIET

bu nedenle, hala "ana bilgisayar adı çözümlenemedi" ve benzeri hatalar alıyorsunuz


SSH bağlantılarınıza güvenebilmelisiniz, yani. Sadece risklerinizi susturmakla kalmaz.
sylvainulg

3
Gerçekten bağlı. Her hafta parçalanan ve yeniden yapılan geliştirme ortamlarımız var, A kayıtları aynı kalıyor, ancak ana bilgisayar anahtarları her oluşturulduğunda üretiliyor. Ana bilgisayar anahtarlarını kalıcı olarak kullanamayız, çünkü A kaydı ortam adını temel alan bir veritabanında tanımlanmıştır ve ortam adları herhangi bir zamanda hurdaya yazılabilir veya yenileri oluşturulabilir, bu nedenle yukarıdaki geçici çözüm gerçekten yararlıdır.
Alex Berry,

2

Devre dışı bırakmayı denedin StrictHostKeyCheckingmi? Sen ile yapabilirsiniz -oseçenek veya yapılandırma dosyasında ~/.ssh/config.


Ben zaten onu kullanıyorum. Ancak bunun farklı bir etkisi var: Ana bilgisayar anahtar kontrolü için katılığı azaltır. Örneğin, ana bilgisayar bilinmediğinde, bu seçeneği devre dışı bıraktığınızda hala bağlantı kurar. Böylece, hala ev sahibi kaydeder. Ama doğru çözümü bulduğumu düşünüyorum (cevabımı gör).
Albert,

0

Aşağıdaki .ssh / config girişlerini faydalı buldum (DHCP ve DNS içeren LAN):

 CheckHostIP no

 Host *.*
 CheckHostIP yes

Sonuç yerel makine adları "zora" veya "goron" dinamik olarak atanmış IP adreslerini kontrol etmeyecek, ancak www.mycompany.com veya node42.planetlab.com adresinde statik IP'leri onaylanacak.

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.