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


Vorrei disabilitare il rigido controllo della chiave host in ssh per Ubuntu 11.04. Come farlo?


163
2017-12-13 14:58


origine


Ciao karthick87, spero che tu capisca le implicazioni sulla sicurezza di fare quel cambiamento;) - Panther
Va notato tuttavia che tu volere per sapere se una chiave host ha cambiato. Questa è una grande bandiera rossa che qualcuno potrebbe falsificare l'host. Quindi UserKnownHostFile / dev / null è una pessima idea.
SSH è usato non solo per le connessioni remote, lo sai. Tutti gli host a cui mi sto connettendo sono in heap sulla mia tabella e condividono lo stesso IP, quindi ho sempre il nuovo avviso dell'host. - Barafu Albino
Se vuoi solo rimuovere il messaggio per un particolare host, elimina la riga corrispondente ~ / .ssh / known_hosts. - stackexchanger
Se devi solo eseguire una connessione una tantum senza errori: ssh -o UserKnownHostsFile=/dev/null - odinho - Velmont


risposte:


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 il * con uno schema di nome host se si desidera solo che si applichi ad alcuni host.

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

sudo chmod 400 ~/.ssh/config

182
2017-12-13 15:16



Non c'è un file chiamato config nella mia home directory. - karthick87
Creane uno - l'intero contenuto del file è nella mia citazione sopra. Nota è nel .ssh sottodirectory del tuo homedir. - Caesium
È necessaria la rientranza? Le mie voci sembrano blocchi divisi da una linea vuota. - Andi Giga
In molti casi ciò non è saggio, spesso si vuole solo disabilitarlo una volta: ssh -o UserKnownHostsFile=/dev/null - odinho - Velmont
mkdir -p ~ / .ssh && echo "Host *"> ~ / .ssh / config && echo "StrictHostKeyChecking no" >> ~ / .ssh / config - Sankarganesh Eswaran


Piuttosto che aggiungerlo al tuo ~/.ssh/config file 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

141
2017-07-25 01:27



Tieni presente che in genere devi eseguire questa operazione solo una volta per host poiché la prima volta la dice: Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts. - MarkHu
Quello non funzionerà. Dovrebbe essere ssh -o UserKnownHostsFile=/dev/null anziché. - qwertzguy
@qwertzguy Funziona. La tua opzione farà in modo che la chiave dell'host venga persa ogni volta, il che è utile e più sicuro, ma non è ciò che la domanda ha richiesto. - Jon Bentley
@qwertzguy Puoi aggiungere questo come risposta, il tuo è davvero il migliore per quick'n'dirty "connetti solo so cosa sto facendo"? Non volevo ninja-rubare la tua risposta. - odinho - Velmont
@ odinho-velmont fatto - qwertzguy


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 su hostkey ha evidenti conseguenze sulla sicurezza: dovresti stare attento a che lo stai facendo per i giusti motivi e che a cosa ti stai collegando effettivamente è a cosa intendi connettersi e non un host malevolo.


80
2017-12-02 23:25



Hai ragione, ricevi il grande avvertimento - Freedom_Ben
Penso che questa sia la risposta giusta. Funziona bene per la connessione a host su una rete locale privata. - Steve Davis
Potrebbe essere conveniente avere un alias ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host. Nel mio caso io uso issh connettersi agli host in cui so che la chiave dell'host cambia. - ecerulm
@ecerulm - solo un piccolo refuso: è UserKnownHostsFile non UserKnownHostFiles. - Grey Panther


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

alias cssh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'

15
2017-07-18 18:01



cssh o ssh? - kenorb
Forse usa cssh.sourceforge.net - MarkHu
Ho sbagliato, o è il secondo -o non necessario? - yckart
alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 11086695@172.26.19.19 -p 2222' lavora per me - arganzheng


Se si desidera disabilitare in una sola volta, utilizzare:

ssh -o UserKnownHostsFile=/dev/null

Ciò funzionerà anche se la chiave dell'host cambia e farà in modo di non salvare la chiave come affidabile per una maggiore sicurezza.


6
2017-08-29 15:55





Da cosa suona come,

NoHostAuthenticationForLocalhost yes

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


4
2017-07-23 20:20





https://askubuntu.com/a/87452/129227 suggerire 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 sito1 sito2 sito3

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='\033[0;34m'  
red='\033[0;31m'  
green='\033[0;32m' # '\e[1;32m' is too bright for white bg.
endColor='\033[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

1
2017-08-25 12:43