.Ssh / known_hosts dosyamı nasıl yönetirim


47

Bunları test etmek için Virtual Box'ta bir grup sanal sunucuya sahip bir Ubuntu masaüstünü çalıştırıyorum. Geçmişte diğer uzak VPS Linux kutularına da bağlandım. Şu anda .ssh/known_hosts, dosyamın içinde bir çoğu artık kullanılmayan bir sürü anahtar var.

Dosyamı temizlemek istiyorum .ssh/known_hosts, ancak hangi anahtarın hangi ana bilgisayara ait olduğunu nasıl bilebilirim? Yani hangi anahtarları güvenle kaldırabileceğimi ve hangilerini yalnız bırakmam gerektiğini nasıl bilebilirim?

Yanıtlar:


64

Known_hosts içindeki bilinen bir ana bilgisayar adı için hangi girişin olduğunu bulmak için:

 # ssh-keygen -H  -F <hostname or IP address>

Known_hosts adresinden tek bir girişi silmek için:

 # ssh-keygen -R <hostname or IP address>

27

Tüm ev sahiplerinizin bir listesi varsa, gibi bir şey yapabilirsiniz

ssh-keyscan -t rsa,dsa -f list_of_hosts > ~/.ssh/known_hosts

Bu, ana bilgisayarları taramaya dayalı olarak yeni oluşturulan bir .ssh / known_hosts dosyanızın üzerine yazacaktır.

Ve ayrıca teorik alıcının önerdiği şeyi yapın; HashKnownHosts, burada yardım etmekten daha fazla sıkıntı yaratıyor.


ssh-keyscanlist_of_hostsdosyanın çok katı biçimlendirme kurallarına sahiptir . Sadece adresler olmalı ve her adresten sonra LF'den sonra boşluk bırakılmamalı. Bu, son adresten sonra LF'yi içerir. Aksi takdirde, oluşturulan dosyada çok fazla çöp alırsınız.
Nux

21

Zorlukla...

Varsayılan hash olarak Ubuntu, bilinen okuyanların adını değiştirir (bu, varsayılan openssh davranışı değildir), dosyayı okuyan herkesin hangi sistemlere eriştiğinizi bilmesini zorlaştırır.

Dosyayı gerçekten temizlemek istiyorsanız, en basit seçenek muhtemelen sadece dosyayı silmek ve ortaya çıktığını bildiğiniz sunucular için anahtarları denetlemektir, ancak gerçekten bilinen_host'ları yalnız bırakırdım.

/ Etc / ssh / ssh_config içindeki seçeneği yorumlayarak yeni ana bilgisayar girişlerinin karma olmasını engelleyebilirsiniz.

#HashKnownHosts yes

~ / .Ssh / known_hosts öğesinin temizlenmesi, uzak ana bilgisayarın yapılandırması değiştiğinde ve ssh bir uyarı gösterdiğinde de yardımcı olur. Bununla birlikte, kişi buna dikkat etmeli ve yalnızca güvenilir ana bilgisayarlar için olan uyarıları dikkate almamalıdır.
Alex

6
Daha iyi bir seçenek, belirli bir ana bilgisayar adı için karma oluşturma yöntemini açıklamak ve bilinen karmaşığı kullanarak bu etiketi aramasını sağlamak olabilir.
Cerin

1
Yukarıdaki değişiklikten sonra, örneğin yeni bir sunucuya bağlanarak yeni bir giriş ekleyin ssh root@something-new-or-new-dns-alias. Bu, orijinal known_hostsdosyayı yenileyecek ve ana bilgisayar adlarını / IP'lerinin şifresini çözecektir.
Nux

2

Bilinen_host dosyamda 300'den fazla eski eski girdi vardı. Tüm sistemler (ve hatta çoğu sistem için) çalışacağından emin değilim ama işte benim Q&D betiğim. Eşleşen dizeleri veya konumu ayarlamanız gerekebilir.

#!/bin/sh
list=`cat ~/.ssh/known_hosts | awk '{print $1}' |sed -e 's/,/ /g' | sort -u `

listsorted=$(printf "%s\n" ${list[@]} | sort -u)
echo $listsorted
#listsorted="10.2.10.1"
echo > /tmp/sshstat.txt
for host in $listsorted ;
do
echo $host 
ssh -oBatchMode=yes -oConnectTimeout=2  root@${host} "exit" >/tmp/sshstat.txt 2>&1 
ret=$?
if [ $ret -ne 0 ]; then
     echo "Failed: $host"
     echo sed -i.bak \"/$host/d\" "~/.ssh/known_hosts" | sh
else
    grep "Offending RSA" /tmp/sshstat.txt |  sed -e 's/:/ /g' | awk '{printf "sed -i.bak -e \"%dd\" %s  \n", $6, "~/.ssh/known_hosts" }' | sh
   fi
done
#echo $list

Bu bir karma known_hostsdosya üzerinde çalışmaz ve sorgulayıcı sorduğundan, "hangi anahtarın hangi ana bilgisayara ait olduğunu nasıl bilebilirim" diye sorduğundan beri, dosyasının saklanması çok muhtemeldir. Ubuntu'da olduğunu ve theotherreceivedediği gibi, varsayılan olarak Ubuntu hash'lerini söylüyor.
Neil Mayhew
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.