web-dev-qa-db-fra.com

Comment désactiver la vérification stricte de la clé de l'hôte dans ssh?

Je souhaite désactiver la vérification stricte de la clé d'hôte dans sshpour Ubuntu 11.04. Comment faire?

204
karthick87

Dans votre ~/.ssh/config (si ce fichier n'existe pas, créez-le simplement):

Host *
    StrictHostKeyChecking no

Cela l'éteindra pour tous les hôtes auxquels vous vous connecterez. Vous pouvez remplacer le * par un modèle de nom d'hôte si vous souhaitez qu'il ne s'applique qu'à certains hôtes.

Assurez-vous que les autorisations sur le fichier limitent l'accès à vous-même uniquement:

Sudo chmod 400 ~/.ssh/config
213
Caesium

Plutôt que de l'ajouter à votre fichier ~/.ssh/config pour tous les hôtes *, il serait plus sûr de spécifier un hôte particulier.

Vous pouvez également passer un paramètre sur la ligne de commande comme ceci:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com
177
MarkHu

Cela vaut la peine de souligner ce paramètre dans votre configuration ssh:

StrictHostKeyChecking no

Cela signifie que les clés hôtes sont toujours ajoutées à .ssh/known_hosts - vous ne serez simplement pas invité à dire si vous leur faites confiance, mais si les hôtes changent, je suis prêt à parier que vous aurez le plus grand avertissement à ce sujet. Vous pouvez contourner ce problème en ajoutant un autre paramètre:

UserKnownHostsFile /dev/null

Cela ajoutera tous ces hôtes "nouvellement découverts" à la corbeille. Si une clé d’hôte change, pas de problèmes.

Je m'en voudrais de ne pas mentionner que contourner ces avertissements sur les hostkeys a des ramifications de sécurité évidentes - vous devez faire attention à ne pas le faire pour les bonnes raisons et à ce que vous vous connectez réellement is quoi vous voulez vous connecter à un hôte malveillant, car à ce stade, vous avez érodé une partie importante de la sécurité dans ssh en tant que solution.

Par exemple, si vous essayez de définir ceci avec la ligne de commande, la commande complète serait:

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@Host

Ce serait idiot cependant - étant donné que les exemples de travail ci-dessus pour les fichiers de configuration SSH auront probablement plus de sens dans tous les cas.

100
pacifist

FYI. Je préfère désactiver la vérification d'hôte lors de l'utilisation de cssh.

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

Si vous souhaitez désactiver l’utilisation unique:

ssh -o UserKnownHostsFile=/dev/null

Cela fonctionnera également si la clé de l'hôte change et fera en sorte de ne pas enregistrer la clé en tant que clé de confiance pour plus de sécurité.

8
qwertzguy

De ce que cela sonne comme,

NoHostAuthenticationForLocalhost yes

peut être assez bon pour vous. ET vous seriez toujours en mesure de maintenir cet semblant de sécurité.

6
alex gray

https://askubuntu.com/a/87452/129227 suggère de modifier le fichier de configuration, ce qui aide. Mais au lieu d’ouvrir les choses à un hôte, je voulais que cela soit fait par hôte. Le script ci-dessous aide à automatiser le processus:

exemple d'appel

./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='\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
2
Wolfgang Fahl