¿Cómo deshabilitar la comprobación estricta de la clave del host en ssh?

173

Me gustaría deshabilitar la comprobación estricta de la clave del host en ssh para Ubuntu 11.04. ¿Cómo hacerlo?

    
pregunta karthick87 13.12.2011 - 15:58

7 respuestas

191

En su ~/.ssh/config (si este archivo no existe, simplemente créelo):

Host *
    StrictHostKeyChecking no

Esto lo apagará para todos los hosts a los que se conecte. Puede reemplazar el * con un patrón de nombre de host si solo desea que se aplique a algunos hosts.

Asegúrese de que los permisos en el archivo limiten el acceso a usted solo:

sudo chmod 400 ~/.ssh/config
    
respondido por el Caesium 13.12.2011 - 16:16
145

En lugar de agregarlo a su archivo ~/.ssh/config para todo el Host *, sería más seguro especificar un host en particular.

También puede pasar un parámetro en la línea de comandos de esta forma:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com
    
respondido por el MarkHu 25.07.2012 - 03:27
83

Vale la pena señalar que:

StrictHostKeyChecking no

Significará que las claves de host aún se agregarán a .ssh / known_hosts; simplemente no se te preguntará si confías en ellas, pero si los hosts cambian, estoy dispuesto a apostar que recibirás una gran advertencia al respecto. Puede solucionar este problema agregando otro parámetro:

UserKnownHostsFile /dev/null

Esto agregará todos estos hosts "recién descubiertos" a la papelera. Si una clave de host cambia, no hay problemas.

Sería negligente no mencionar que eludir estas advertencias en las claves de host tiene ramificaciones obvias de seguridad. Debe tener cuidado de hacerlo por los motivos correctos & que a lo que te estás conectando realmente es lo que quieres conectar y no a un host malicioso.

    
respondido por el pacifist 03.12.2013 - 00:25
15

FYI. Prefiero deshabilitar la comprobación de host solo cuando uso cssh.

alias cssh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
    
respondido por el Kyle 18.07.2013 - 20:01
6

Si desea deshabilitar una sola vez, utilice:

ssh -o UserKnownHostsFile=/dev/null

Esto también funcionará si la clave del host cambia y se asegurará de no guardar la clave como de confianza para mayor seguridad.

    
respondido por el qwertzguy 29.08.2017 - 17:55
4

Por lo que suena ,

NoHostAuthenticationForLocalhost yes

puede ser lo suficientemente bueno para ti. Y aún sería capaz de mantener esa apariencia de seguridad.

    
respondido por el alex gray 23.07.2015 - 22:20
1

enlace sugiere modificar el archivo de configuración que ayuda. Pero en lugar de abrir las cosas para cualquier host, quería que esto se hiciera por host. El siguiente script ayuda a automatizar el proceso:

llamada de ejemplo

./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://ubuntusp.info/questions/796/como-deshabilitar-la-comprobacion-estricta-de-la-clave-del-h"$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
    
respondido por el Wolfgang Fahl 25.08.2017 - 14:43

Lea otras preguntas en las etiquetas