ssh: 'hostname' ana bilgisayarının özgünlüğü oluşturulamıyor


153

Bir makineye ssh yaptığımda, bazen bu hata uyarısını alıyorum ve "evet" ya da "hayır" demesi isteniyor. Bu, otomatik olarak diğer makinelere ssh olan komut dosyalarından çalışırken bazı sorunlara neden olur.

Uyarı mesajı:

The authenticity of host '<host>' can't be established.
ECDSA key fingerprint is    SHA256:TER0dEslggzS/BROmiE/s70WqcYy6bk52fs+MLTIptM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'pc' (ECDSA) to the list of known hosts.

Otomatik olarak "evet" demenin veya bunu görmezden gelmenin bir yolu var mı?


27
Buna karşı tavsiye ediyorum. Bu hataları neden aldığınız üzerinde çalışmanız gerekiyor, aksi takdirde kendinizi orta saldırıda bir adama açıyorsunuz, bu da bu hataların sizi korumaya çalıştığı şey.
Peter Bagnall

3
Bu, bu ssh anahtarını kullanan sunucudaki bir değişiklikten veya sizin ve sunucunuz arasında oturan / gönderdiğiniz / aldığınız her şeyi dinleyen birinden kaynaklanabilir.
derekdreery

bu hatanın nedeni ne olabilir?
AiU

Peter'ın görüşüne katılmıyorum. Büyük bir organizasyonda, sadece işinizi yapmaya çalıştığınızda böyle sorunları çözmek için başka birini bulmaya çalışmak gerçekçi değildir.
Sridhar Sarnobat

Birçok büyük kuruluş, @SridharSarnobat'ın önerdiğinin tam tersidir. Sen var emin doğru insanlar problemleri olanlar türlü çözmeye yapmak ve çevrelerindeki işe teşebbüs sadece işleri kötüleştirir.
James Moore

Yanıtlar:


135

Ssh istemcinize bağlı olarak, StrictHostKeyChecking seçeneğini komut satırında no olarak ayarlayabilir ve / veya anahtarı boş bir bilinen_hosts dosyasına gönderebilirsiniz. Bu seçenekleri yapılandırma dosyanızda, tüm ana bilgisayarlar için veya belirli bir IP adresi veya ana bilgisayar adı kümesi için de ayarlayabilirsiniz.

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

DÜZENLE

@IanDunn'ın belirttiği gibi, bunu yapmak için güvenlik riskleri vardır. Bağlandığınız kaynak bir saldırgan tarafından aldatılmışsa, hedef sunucunun zorluğunu size geri gönderebilir ve sizi bu kaynağa bağlanırken uzak kaynağa bağlandığınızı düşünmenize kandırabilir. kimlik bilgileriniz. HostKeyChecking'i atlamak için bağlantı mekanizmanızı değiştirmeden önce bunun uygun bir risk olup olmadığına dikkat etmelisiniz.

Referans .


40
Güvenlik açısından uyarıda bulunmaksızın bunu tavsiye etmenin sorumsuz olduğunu düşünüyorum. superuser.com/a/421084/121091 daha iyi bir yanıt IMO'dur.
Ian Dunn

5
@IanDunn Genel bir SSH istemcisi durumunda sizinle aynı fikirdeyim, ancak OP'nin komut dosyalarını çalıştırırken bu sorunla karşılaştığını açıkça belirtmesi durumunda, alternatif, ana bilgisayar anahtarı her değiştiğinde komut dosyasını kırıyor (ve bunun birkaç nedeni var) söz konusu yanıt) yanıt vermediğiniz durumlar olabilir. Bununla birlikte, geçerli bir eleştiri, bu yüzden riski işaret etmek için cevabımı güncelledim.
cori

6
Pek çok insanın bu cevabı iptal ettiğini ve aynı zamanda soru soran tarafından kabul edildiğine inanamıyorum. Bu yaklaşım güvenlik kontrollerini atlar ve uzak ana bilgisayara bağlar. ~ / .Ssh / klasöründeki bilinen_hosts dosyasının yazma izni olup olmadığını kontrol edin. Değilse, bu yanıtı kullanın stackoverflow.com/a/35045005/2809294
ARK

Ne yaptığınızı bildiğiniz sürece, bu en iyi çözümdür. Otomatik olarak bağlandığımız dahili bir web sitem var. Bunu ~ / .ssh / config dosyasına ekledim ve işe yarıyor. Ben US sen BİLMEK bu site ben öyle düşünüyorum ne olduğunu ve eğer değilse Veri aktarılıyor biliyorum çünkü kötü adamlar, hiçbir avantajı var.
user1683793

75

Daha iyi bir cevabı hak eden eski soru.

Etkileşimli istemi devre dışı bırakmadan StrictHostKeyChecking(güvenli olmayan) önleyebilirsiniz .

Betiğinize aşağıdaki mantığı ekleyin:

if [ -z "$(ssh-keygen -F $IP)" ]; then
  ssh-keyscan -H $IP >> ~/.ssh/known_hosts
fi

Sunucunun ortak anahtarının bulunup bulunmadığını kontrol eder known_hosts. Değilse, sunucudan genel anahtar ister ve ekler known_hosts.

Bu şekilde, Ortadaki Adam saldırısına yalnızca bir kez maruz kalırsınız, bu da aşağıdakiler tarafından hafifletilebilir:

  • komut dosyasının güvenli bir kanal üzerinden ilk kez bağlanmasını sağlama
  • parmak izlerini manuel olarak kontrol etmek için günlükleri veya bilinen_host'ları inceleme (yalnızca bir kez yapılacak)

4
Veya altyapı yapılandırması kurulumunuzun bir parçası olarak tüm makineler için bilinen_hosts dosyasını yönetin.
Thilo


1
beklendiği gibi çalışmaz. `ssh-keygen -F $IP` "`ssh-keygen -F $IP`"(tırnak içinde) olmalıdır, diğer durumda bir dize olarak yorumlanmaz
avtomaton

Veya ssh-kegen dönüş değerini kullanan bir oneliner olarak:ssh-keygen -F $IP >/dev/null || ssh-keyscan -H $IP >> ~/.ssh/known_hosts
Gohu

38

Devre dışı bırakmak (veya devre dışı bırakmayı kontrol etmek) için, aşağıdaki satırları başına ekleyin /etc/ssh/ssh_config...

Host 192.168.0.*
   StrictHostKeyChecking=no
   UserKnownHostsFile=/dev/null

Seçenekler:

  • Ana Bilgisayar alt *ağı, tüm IP'lere sınırsız erişime izin verebilir.
  • Genel /etc/ssh/ssh_configyapılandırma veya ~/.ssh/configkullanıcıya özgü yapılandırma için düzenleyin.

Bkz. Http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html

Superuser.com'da benzer soru - bkz. Https://superuser.com/a/628801/55163


19

~/.ssh/known_hostsYazılabilir olduğundan emin olun . Bu benim için sorunumu çözdü.


4
herkesin bilinen_hostlara yazmasına izin vermek güvenli midir?
akaRem

2
@akaRem kesinlikle değil. Genellikle bu .sshklasörün sahibi olan kullanıcıya yazılabilir olmasını istersiniz .
2rs2ts

izinler 0400en uygunudur (lütfen beni düzeltin), ancak benim durumumda sorun, .sshkullanıcı için klasörün kendi sahipliğini değiştirmiş olmasıydı - kendi 0400 izinlerimi geçersiz kılıyor. sudomülkiyeti bana geri göndermek sorunumu çözdü.
Charney Kaye

Bu benim için sorunu düzeltti.
Mart'ta Sivaji

14

Bunu yapmanın en iyi yolu, 'StrictHostKeyChecking'e ek olarak' BatchMode 'kullanmaktır. Bu şekilde, komut dosyanız yeni bir ana bilgisayar adını kabul eder ve bilinen_hosts dosyasına yazar, ancak evet / hayır müdahalesi gerektirmez.

ssh -o BatchMode=yes -o StrictHostKeyChecking=no user@server.example.com "uptime"

10

Normalde '~ / .ssh / config' konumunda bulunan yapılandırma dosyanızı düzenleyin ve dosyanın başlangıcında aşağıdaki satırları ekleyin

Host *
    User                   your_login_user
    StrictHostKeyChecking  no
    IdentityFile          ~/my_path/id_rsa.pub

Kullanıcı olarak ayarlanmışsa your_login_user, bu ayarlar sizin_login_user
StrictHostKeyChecking değerinin hayır olarak ayarlandığını belirterek
IdentityFile komutunun RSA anahtarına giden yol istemini önler

Bu benim ve senaryolarım için işe yarıyor, size iyi şanslar.


Teşekkürler gerçekten günü kurtardı. Ama son satır ne IdentityFileiçin? O olmadan da çalışıyor gibi görünüyor ..
supersan

7

Bu uyarı güvenlik özellikleri nedeniyle verilir, bu özelliği devre dışı bırakmayın.

Sadece bir kez görüntülenir.

İkinci bağlantıdan sonra hala görünüyorsa, sorun büyük olasılıkla known_hostsdosyaya yazılıdır. Bu durumda aşağıdaki mesajı da alırsınız:

Failed to add the host to the list of known hosts 

Kullanıcı tarafından yazılabilir dosyanın izinlerini değiştirerek sahibini değiştirerek düzeltebilirsiniz.

sudo chown -v $USER ~/.ssh/known_hosts

5

Cori'nin cevabına referans olarak, onu değiştirdim ve çalışan komutun altında kullandım. Olmadan exit, kalan komut aslında komut dosyasında istemediğim uzak makineye giriş yapıyordu

ssh -o StrictHostKeyChecking=no user@ip_of_remote_machine "exit"

5

Bunu yap -> chmod +w ~/.ssh/known_hosts. Bu, adresindeki dosyaya yazma izni ekler ~/.ssh/known_hosts. Bundan sonra known_hosts, bir sonraki sefer bağlandığınızda uzak ana bilgisayar dosyaya eklenecektir .


4

İdeal olarak, kendi kendini yöneten bir sertifika yetkilisi oluşturmanız gerekir. Bir anahtar çifti oluşturmakla başlayın: ssh-keygen -f cert_signer

Ardından, her sunucunun genel ana bilgisayar anahtarını imzalayın: ssh-keygen -s cert_signer -I cert_signer -h -n www.example.com -V +52w /etc/ssh/ssh_host_rsa_key.pub

Bu, imzalı bir genel ana bilgisayar anahtarı oluşturur: /etc/ssh/ssh_host_rsa_key-cert.pub

İçinde /etc/ssh/sshd_config, HostCertificatebu dosyayı işaret edin : HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub

Sshd hizmetini yeniden başlatın: service sshd restart

Daha sonra SSH istemcisinde aşağıdakileri ekleyin ~/.ssh/known_hosts: @cert-authority *.example.com ssh-rsa AAAAB3Nz...cYwy+1Y2u/

Yukarıdakiler şunları içerir:

  • @cert-authority
  • Alan adı *.example.com
  • Açık anahtarın tüm içeriği cert_signer.pub

cert_signerAçık anahtar olan kamu konak anahtarı tarafından imzalanmış herhangi bir sunucu güvenir cert_signerözel anahtar.

Bu, istemci tarafında tek seferlik bir yapılandırma gerektirmesine rağmen, henüz sağlanmamış olanlar da dahil olmak üzere birden çok sunucuya güvenebilirsiniz (her sunucuyu imzaladığınız sürece).

Daha fazla ayrıntı için bu wiki sayfasına bakın .


2

Genellikle bu sorun, anahtarları çok sık değiştirdiğinizde oluşur. Sunucuya bağlı olarak, oluşturduğunuz ve sunucuya yapıştırdığınız yeni anahtarın güncellenmesi biraz zaman alabilir. Bu yüzden anahtarı oluşturduktan ve sunucuya yapıştırdıktan sonra 3 ila 4 saat bekleyin ve sonra deneyin. Sorun çözülmeli. Benimle oldu.



0

Bunu ana sunucuda çalıştırın, bu premonition sorunu

chmod -R 700 ~/.ssh

sizden yetkili_anahtarlar ve açık anahtarlar üzerindeki izinleri 644'ten 700'e değiştirmelerini istiyor musunuz? Ve 600'den 700'e kadar özel anahtar?
nurettin

0

Aynı hatayla karşılaştım ve - başıma geldiği gibi - sadece yanlış ayrıcalıklara sahip olabileceğinize dikkat çekmek istedim. Dizininizi normal veya kullanıcı olarak
ayarladınız ve bu nedenle doğru kullanıcı olmanız gerekiyor. Bu hata göründüğünde, öyleydim ama normal kullanıcı olarak yapılandırıldım . Çıkmak düzeltti..sshrootroot.sshroot


-3

Aşağıda yazılı hata veren sorunu çözdüm :
Hata:
'XXX.XXX.XXX' ana bilgisayarının özgünlüğü belirlenemiyor.
RSA anahtar parmak izi 09: 6c: ef: cd: 55: c4: 4f: ss: 5a: 88: 46: 0a: a9: 27: 83: 89'dur.

Çözüm:
1. herhangi bir openSSH aracını takın.
2. ssh komutunu çalıştırın.
3. bu ana bilgisayarı eklemek ister misiniz? EVET kabul et.
4. Bu ana bilgisayar, bilinen ana bilgisayar listesine eklenecektir.
5. Artık bu ana bilgisayara bağlanabilirsiniz.

Bu çözüm şu anda çalışıyor ......


Bu soruya cevap vermiyor. Orijinal (çok eski) soru, bu tür komut istemlerini komut dosyası aracılığıyla otomatik olarak onaylama yeteneğiyle ilgilidir.
MasterAM

Eğer onun için çalışsaydı belki başkaları için de işe yarar. Faydalı bir şey indirmenize gerek yok
Mbotet

"ssh" çalıştırmıyor. Seçenekler kullanımı için gösteriliyor: ssh [..] [..] [..] [kullanıcı @] ana bilgisayar adı [komut]
P Satish Patro
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.