Je souhaite désactiver la vérification stricte de la clé d'hôte dans ssh
pour Ubuntu 11.04. Comment faire?
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
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
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.
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'
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é.
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é.
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