ssh sıkı host anahtarını nasıl devre dışı bırakılır?

161

Ubuntu 11.04 için ssh dizininde sıkı ana makine anahtarını devre dışı bırakmak istiyorum. Nasıl yapmalı?

    
sordu karthick87 13.12.2011 15:58

7 cevap

182

~/.ssh/config dosyanıza (bu dosya mevcut değilse, sadece oluşturun):

Host *
    StrictHostKeyChecking no

Bu, bağlandığınız tüm ana makineler için kapatılacak. Yalnızca bazı ana makinelere uygulanmasını istiyorsanız, * 'i bir hostname kalıbı ile değiştirebilirsiniz.

Dosyadaki izinlerin yalnızca kendinize erişimi kısıtladığından emin olun:

sudo chmod 400 ~/.ssh/config
    
verilen cevap Caesium 13.12.2011 16:16
141

Tüm ana makine * için ~/.ssh/config dosyanıza eklemek yerine, belirli bir ana bilgisayarı belirtmek daha güvenli olacaktır.

Ayrıca, komut satırında şu şekilde bir parametre de geçirebilirsiniz:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com
    
verilen cevap MarkHu 25.07.2012 03:27
79

Bunu işaret etmeye değer:

StrictHostKeyChecking no

Ana bilgisayar anahtarlarının hala .ssh / known_hosts'a ekleneceği anlamına gelecektir - onlara güvenip güvenmediğiniz konusunda size bir uyarı verilmeyecektir, ancak değişime ev sahipliği yapmam gerekirse, bahse girerim bu konuda büyük bir uyarı alırsınız. Başka bir parametre ekleyerek bu soruna geçici bir çözüm bulabilirsiniz:

UserKnownHostsFile /dev/null

Bu, tüm "yeni keşfedilen" konakçıları çöp kutusuna ekler. Bir ana bilgisayar anahtarı değişirse, sorun olmaz.

Bu uyarıları ana bilgisayarlarda atlatmanın bariz güvenlik etkileri olduğunu söylememekten çekinmeyeceğim - doğru nedenlerle yaptığınız konusunda dikkatli olmalısınız. aslında bağlandığınız şey, , kötü niyetli bir sunucuya bağlanıp değil, ne demek istediğidir.

    
verilen cevap pacifist 03.12.2013 00:25
15

Bilginize. Sadece cssh kullanırken ana bilgisayar kontrolünü devre dışı bırakmayı tercih ederim.

alias cssh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
    
verilen cevap Kyle 18.07.2013 20:01
6

Tek seferde devre dışı bırakmak istiyorsanız:

ssh -o UserKnownHostsFile=/dev/null

Ayrıca, ana makine anahtarı değiştiğinde ve ek güvenlik için güvenilir olarak anahtarı kaydetmediğinizden de emin olun.

    
verilen cevap qwertzguy 29.08.2017 17:55
4

Ne olduğundan gibi geliyor ,

NoHostAuthenticationForLocalhost yes

sizin için yeterince iyi olabilir. Ve hala bu güvenlik tarzını koruyabilirsin.

    
verilen cevap alex gray 23.07.2015 22:20
1

İşte yardımcı olan yapılandırma dosyasını değiştirmenizi önerir. Ancak herhangi bir ev sahibi için bir şeyler açmak yerine, bunun ev sahibi başına yapılmasını istedim. Aşağıdaki komut, işlemin otomatikleştirilmesine yardımcı olur:

örnek çağrı

./ sshcheck somedomain site1 site2 site3

sshcheck komut dosyası

#!/bin/bash
# WF 2017-08-25
# check ssh access to bitplan servers

#ansi colors
#http://www.csc.uvic.ca/~sae/seng265/fall04/tips/s265s047-tips/bash-using-colors.html
blue='3[0;34m'  
red='3[0;31m'  
green='3[0;32m' # '\e[1;32m' is too bright for white bg.
endColor='3[0m'

#
# a colored message 
#   params:
#     1: l_color - the color of the message
#     2: l_msg - the message to display
#
color_msg() {
  local l_color=""
  local l_msg=""
  echo -e "${l_color}$l_msg${endColor}"
}

#
# error
#
#   show an error message and exit
#
#   params:
#     1: l_msg - the message to display
error() {
  local l_msg=""
  # use ansi red for error
  color_msg $red "Error: $l_msg" 1>&2
  exit 1
}

#
# show the usage
#
usage() {
  echo "usage: %pre% domain sites"
  exit 1 
}

#
# check the given server
#
checkserver() {
  local l_server=""
  grep $l_server $sconfig > /dev/null
  if [ $? -eq 1 ]
  then
    color_msg $blue "adding $l_server to $sconfig"
    today=$(date "+%Y-%m-%d")
    echo "# added $today by %pre%"  >> $sconfig
    echo "Host $l_server" >> $sconfig
    echo "   StrictHostKeyChecking no" >> $sconfig
    echo "   userKnownHostsFile=/dev/null" >> $sconfig
    echo "" >> $sconfig
  else
    color_msg $green "$l_server found in $sconfig"
  fi
  ssh -q $l_server id > /dev/null
  if [ $? -eq 0 ]
  then
    color_msg $green "$l_server accessible via ssh"
  else
    color_msg $red "ssh to $l_server failed" 
    color_msg $blue "shall I ssh-copy-id credentials to $l_server?"
    read answer
    case $answer in
      y|yes) ssh-copy-id $l_server
    esac
  fi
}

#
# check all servers
#
checkservers() {
me=$(hostname -f)
for server in $(echo $* | sort)
do
  os='uname'
  case $os in
   # Mac OS X
   Darwin*)
     pingoption=" -t1";;
    *) ;;
  esac

  pingresult=$(ping $pingoption -i0.2 -c1 $server)
  echo $pingresult | grep 100 > /dev/null
  if [ $? -eq 1 ]
  then 
    checkserver $server
    checkserver $server.$domain
  else
    color_msg $red "ping to $server failed"
  fi
done
}

#
# check configuration
#
checkconfig() {
#https://askubuntu.com/questions/87449/how-to-disable-strict-host-key-checking-in-ssh
  if [ -f $sconfig ]
  then
    color_msg $green "$sconfig exists"
    ls -l $sconfig
  fi
}

sconfig=~/.ssh/config

case  $# in
  0) usage ;;
  1) usage ;;
  *) 
    domain= 
    shift 
    color_msg $blue "checking ssh configuration for domain $domain sites $*"
    checkconfig
    checkservers $* 
    ;;
esac
    
verilen cevap Wolfgang Fahl 25.08.2017 14:43

Etiketlerdeki diğer soruları oku