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

223

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

karthick87
la source
10
Bonjour karthick87, j'espère que vous comprenez les implications de ce changement pour la sécurité;)
Panther
1
Notez toutefois que vous souhaitez savoir si une clé d’hôte a été modifiée . C’est un grand drapeau rouge que quelqu'un peut usurper l’hôte. Donc, UserKnownHostFile / dev / null est une très mauvaise idée.
4
SSH est utilisé non seulement pour les connexions à distance, vous savez. Tous les hôtes auxquels je me connecte sont en tas sur ma table et partagent la même adresse IP. J'ai donc toujours l'avertissement du nouvel hôte.
Barafu Albino
Si vous souhaitez uniquement supprimer le message d'un hôte particulier, supprimez la ligne correspondante ~ / .ssh / known_hosts.
stackexchanger
2
Si vous avez juste besoin de faire une connexion unique sans erreurs:ssh -o UserKnownHostsFile=/dev/null
odinho - Velmont

Réponses:

227

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

Host *
    StrictHostKeyChecking no

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

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

sudo chmod 400 ~/.ssh/config
Césium
la source
1
Il n'y a pas de fichier nommé configdans mon répertoire personnel.
karthick87
4
Make one - tout le contenu du fichier se trouve dans ma citation ci-dessus. Notez qu'il se trouve également dans le .sshsous - répertoire de votre répertoire personnel.
Cesium
L'indentation est-elle requise? Mes entrées ressemblent à des blocs divisés par une ligne vide.
Andi Giga
4
C’est imprudent dans de nombreux cas, vous voulez souvent le désactiver une seule fois:ssh -o UserKnownHostsFile=/dev/null
odinho - Velmont
1
mkdir -p ~ / .ssh && echo "hôte *"> ~ / .ssh / config && echo "StrictHostKeyChecking no" >> ~ / .ssh / config
147.3k
189

Plutôt que de l'ajouter à votre ~/.ssh/configfichier 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
MarkHu
la source
Notez que vous n'avez généralement besoin de le faire qu'une fois par hôte, car il le dit pour la première fois:Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts.
MarkHu
24
Ça ne marchera pas. Cela devrait être à la ssh -o UserKnownHostsFile=/dev/nullplace.
Qwertzguy
1
@qwertzguy Cela fonctionne. Votre option fera en sorte que la clé de l'hôte soit perdue à chaque fois, ce qui est utile et plus sécurisé, mais pas ce que la question a demandé.
Jon Bentley
@qwertzguy Pourriez-vous ajouter cela comme réponse, le vôtre est vraiment le meilleur pour quick'n'dirty "connectez-vous je sais ce que je fais"? Je ne voulais pas que votre réponse soit volée par un ninja.
odinho - Velmont
@ odinho-velmont done
qwertzguy
106

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 - on ne vous demandera pas 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 le fait que contourner ces avertissements sur les hostkeys a des ramifications de sécurité évidentes - vous devez faire attention à le faire pour les bonnes raisons et à ce que vous vous connectez est ce que vous voulez réellement connecter et non. 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.

pacifiste
la source
1
Vous avez raison, vous obtenez le grand avertissement
Freedom_Ben
1
Je pense que c'est la bonne réponse. Cela fonctionne bien pour se connecter à des hôtes sur un réseau local privé.
Steve Davis
4
Pourrait être pratique d'avoir un alias à ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host. Dans mon cas, je me isshconnecte à des hôtes sur lesquels je connais les modifications apportées à la clé de l'hôte.
ecerulm
1
@ecerulm - juste une petite faute de frappe: ce n'est UserKnownHostsFilepas UserKnownHostFiles.
Grey Panther
20

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'
Kyle
la source
csshou ssh?
Kenorb
Peut-être qu'il utilise cssh.sourceforge.net
MarkHu le
Est-ce que je me trompe ou la seconde est-elle -oinutile?
Yckart
1
alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] -p 2222'travaille pour moi
arganzheng
9

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é.

Qwertzguy
la source
6

D'après ce que cela ressemble ,

NoHostAuthenticationForLocalhost yes

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

alex grey
la source
2

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 se fasse 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
Wolfgang Fahl
la source