it-swarm.asia

.Ssh / known_hosts dosyamı yönetme

Bir şeyleri test etmek için Virtual Box'da bir grup sanal sunucu ile bir Ubuntu masaüstünü çalıştırıyorum. Geçmişte başka uzak VPS Linux kutularına da bağlanıyordum. Şu anda .ssh/known_hosts dosyasında çoğu artık kullanılmayan bir sürü anahtar var.

Temizlemek istiyorum .ssh/known_hosts dosyası, 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?

49
Luke

Bilinen_asistemlerde bilinen bir ana bilgisayar adı için hangi girdinin olduğunu bulmak için:

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

Bilinen_anahtarlardan tek bir girişi silmek için:

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

Tüm ev sahiplerinizin bir listesi varsa, aşağıdaki gibi bir şey yapabilirsiniz

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

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

Ve ayrıca teorik almanın önerilerini yapın; HashKnownHosts burada yardım etmekten daha fazla can sıkıcı.

27
freiheit

Zorlukla...

Ubuntu varsayılan olarak, dosyayı okuyan herkesin hangi sistemlere eriştiğinizi bilmesini zorlaştırmak için bilinen_hosts dosyasını barındırır (bu varsayılan openssh davranışı değildir).

Dosyayı gerçekten temizlemek istiyorsanız, en basit seçenek muhtemelen sadece silmek ve ortaya çıktıklarını bildiğiniz sunucular için anahtarları kontrol etmektir, ancak gerçekten sadece bilinen_anahtarları yalnız bırakıyorum.

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

#HashKnownHosts yes
21
theotherreceive

Bilinen_hosts dosyamda 300'den eski eski girişler vardı. Tüm sistemlerde (hatta çoğu sistemde) ç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  [email protected]${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
2
user1953828