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

Je souhaite désactiver l'enregistrement strict de la clé d'hôte ssh pour Ubuntu 11.04. Comment faire?

Dans votre ~/.ssh/config (si ce fichier n'existe pas, il suffit de le créer):

Host *    StrictHostKeyChecking no

Cela le désactivera pour tous les hôtes auxquels vous vous connectez. Vous pouvez remplacer le * avec 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 restreignent l'accès à vous-même uniquement:

sudo chmod 400 ~/.ssh/config

Plutôt que de l'ajouter à votre ~/.ssh/config fichier 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

Cela ajoutera automatiquement la clé d'hôte à votre fichier known_hosts si elle n'est pas déjà là.

S'il y a une incompatibilité, il affichera un grand avertissement et ne mettra pas à jour known_hosts. Il désactivera également l'authentification par mot de passe pour empêcher les attaques MITM. L'authentification par clé privée passera toujours automatiquement, ce que vous ne voudrez peut-être pas.

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

StrictHostKeyChecking no

Cela signifie que les clés d'hôte sont toujours ajoutées à .ssh / known_hosts - vous ne serez tout simplement pas invité à savoir si vous leur faites confiance, mais si les hôtes changent, je suis prêt à parier que vous obtiendrez le 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é hôte change, aucun problème.

Je m'en voudrais de ne pas mentionner que le contournement de ces avertissements sur les clés d'hôte a des ramifications évidentes en matière de sécurité - vous devez faire attention à ce que vous le fassiez pour les bonnes raisons et à ce à quoi vous vous connectez réellement être ce que vous voulez dire se connecter à et non à un hôte malveillant, car à ce stade, vous avez érodé une grande partie de la sécurité de ssh en tant que solution.

Par exemple, si vous deviez essayer de le définir 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 sont susceptibles d'avoir plus de sens dans tous les cas.

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

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

Si vous souhaitez désactiver sur une base unique, utilisez:

ssh -o UserKnownHostsFile=/dev/null

Cela fonctionnera également si la clé de l'hôte change et s'assurera de ne pas enregistrer la clé comme approuvée pour plus de sécurité.

De ce qu'il on dirait,

NoHostAuthenticationForLocalhost yes

peut être assez bien, pour toi. ET vous seriez toujours en mesure de maintenir ce semblant de sécurité.

https://askubuntu.com/a/87452/129227 suggérer de modifier le fichier de configuration qui aide. Mais au lieu d'ouvrir les choses à n'importe quel 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.htmlblue='\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 displayerror() {  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"  fidone}## 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/configcase  $# in  0) usage ;;  1) usage ;;  *)     domain=$1     shift     color_msg $blue "checking ssh configuration for domain $domain sites $*"    checkconfig    checkservers $*     ;;esac

Salut karthick87, j’espère que vous comprenez les implications de sécurité de ce changement :wink:

SSH n’est pas seulement utilisé 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, donc j’ai toujours l’avertissement du nouvel hôte.

Si vous avez juste besoin de faire une connexion unique sans erreur: 'ssh-o UserKnownHostsFile= / dev / null`

Il convient toutefois de noter que vous * * voulez * * savoir si une clé d’hôte a changé. C’est un gros drapeau rouge que quelqu’un peut usurper l’hôte. Donc UserKnownHostFile / dev / null est une très mauvaise idée.

Si vous souhaitez simplement supprimer le message pour un hôte particulier, supprimez la ligne correspondante~/.ssh / known_hosts.

Merci @odinho-Velmont, j’avais besoin de le faire lors du tunneling inverse de plusieurs hôtes différents vers le même port local (un à la fois, bien sûr). Sans cela, le serveur se plaint lors de la connexion en utilisant les mêmes informations d’identification aux différents serveurs.

Bien sûr, il y a des raisons valables à cette question, mais l’avertissement bien visible aide à protéger les gens lorsqu’ils accèdent à cette page pour la mauvaise raison.