Come disabilitare il rigido controllo della chiave dell'host in ssh?

176

Vorrei disabilitare il controllo rigoroso della chiave dell'host in ssh per Ubuntu 11.04. Come si fa?

    
posta karthick87 13.12.2011 - 15:58

7 risposte

192

Nel tuo ~/.ssh/config (se questo file non esiste, basta crearlo):

Host *
    StrictHostKeyChecking no

Questo lo spegnerà per tutti gli host a cui ti connetti. Puoi sostituire * con un pattern di nome host se desideri che sia applicato solo ad alcuni host.

Assicurati che le autorizzazioni sul file limitino solo l'accesso a te stesso:

sudo chmod 400 ~/.ssh/config
    
risposta data Caesium 13.12.2011 - 16:16
148

Invece di aggiungerlo al tuo file ~/.ssh/config per tutti gli host *, sarebbe più sicuro specificare un particolare host.

Puoi anche passare un parametro sulla riga di comando in questo modo:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com
    
risposta data MarkHu 25.07.2012 - 03:27
84

Vale la pena sottolineare che:

StrictHostKeyChecking no

Significa che i tasti host sono ancora aggiunti a .ssh / known_hosts - non ti verrà chiesto se ti fidi di loro, ma se gli host dovessero cambiare sono disposto a scommettere che riceverai il grande avvertimento a riguardo. Puoi aggirare questo problema aggiungendo un altro parametro:

UserKnownHostsFile /dev/null

Questo aggiungerà tutti questi host "appena scoperti" nel cestino. Se una chiave host cambia, nessun problema.

Sarei negligente, per non parlare del fatto che aggirare questi avvertimenti sugli hostkey ha ovvie implicazioni sulla sicurezza: dovresti fare attenzione che lo stai facendo per i giusti motivi e amp; che quello che stai collegando a è in realtà è ciò a cui intendi connetterti e non un host malevolo.

    
risposta data pacifist 03.12.2013 - 00:25
16

FYI. Preferisco disabilitare il controllo dell'host solo quando si usa cssh.

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

Se vuoi disabilitarlo in una volta, usa:

ssh -o UserKnownHostsFile=/dev/null

Funzionerà anche se la chiave dell'host cambia e si assicurerà di non salvare la chiave come affidabile per una maggiore sicurezza.

    
risposta data qwertzguy 29.08.2017 - 17:55
4

Da ciò che suona ,

NoHostAuthenticationForLocalhost yes

potrebbe essere abbastanza buono, per te. E tu saresti ancora in grado di mantenere quella parvenza di sicurezza.

    
risposta data alex gray 23.07.2015 - 22:20
1

Il link suggerisce di modificare il file di configurazione che aiuta. Ma invece di aprire le cose per qualsiasi host volevo che fosse fatto per host. Lo script seguente aiuta ad automatizzare il processo:

esempio di chiamata

./ sshcheck somedomain site1 site2 site3

script sshcheck

#!/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="$1"
  local l_msg="$2"
  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="$1"
  # use ansi red for error
  color_msg $red "Error: $l_msg" 1>&2
  exit 1
}

#
# show the usage
#
usage() {
  echo "usage: $0 domain sites"
  exit 1 
}

#
# check the given server
#
checkserver() {
  local l_server="$1"
  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 $0"  >> $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=$1 
    shift 
    color_msg $blue "checking ssh configuration for domain $domain sites $*"
    checkconfig
    checkservers $* 
    ;;
esac
    
risposta data Wolfgang Fahl 25.08.2017 - 14:43

Leggi altre domande sui tag