Como desabilitar a verificação estrita da chave do host em ssh?

172

Eu gostaria de desabilitar a verificação de chave de host restrita em ssh para o Ubuntu 11.04. Como fazer isso?

    
por karthick87 13.12.2011 / 15:58

7 respostas

190

Em seu ~/.ssh/config (se esse arquivo não existir, basta criá-lo):

Host *
    StrictHostKeyChecking no

Isso irá desativá-lo para todos os hosts aos quais você se conectar. Você pode substituir o * por um padrão de nome de host se quiser que ele seja aplicado apenas a alguns hosts.

Verifique se as permissões do arquivo restringem o acesso somente a você:

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

Em vez de adicioná-lo ao seu arquivo ~/.ssh/config para todos os Hosts *, seria mais seguro especificar um host específico.

Você também pode passar um parâmetro na linha de comando assim:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com
    
por MarkHu 25.07.2012 / 03:27
82

Vale a pena ressaltar que:

StrictHostKeyChecking no

As chaves do host ainda serão adicionadas a .ssh / known_hosts - você não será questionado se confia nelas, mas se os hosts mudarem, estou disposto a apostar que você receberá um grande aviso sobre isso. Você pode contornar esse problema adicionando outro parâmetro:

UserKnownHostsFile /dev/null

Isso adicionará todos esses hosts "recém-descobertos" à lixeira. Se uma chave do host mudar, sem problemas.

Eu seria negligente em não mencionar que contornar esses avisos nas chaves do host tem ramificações de segurança óbvias - você deve ter cuidado para fazer isso pelos motivos certos & que o que você está conectando é o que você quer se conectar e não um host malicioso.

    
por pacifist 03.12.2013 / 00:25
15

FYI. Eu prefiro desabilitar a verificação do host apenas quando estiver usando o cssh.

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

Se você quiser desativar uma vez, use:

ssh -o UserKnownHostsFile=/dev/null

Isso também funcionará se a chave do host for alterada e não salvará a chave como confiável para maior segurança.

    
por qwertzguy 29.08.2017 / 17:55
4

Do que soa como ,

NoHostAuthenticationForLocalhost yes

pode ser bom o suficiente para você. E você ainda seria capaz de manter essa aparência de segurança.

    
por alex gray 23.07.2015 / 22:20
1

link sugere modificar o arquivo de configuração, o que ajuda. Mas, em vez de abrir as portas para qualquer host, eu queria que isso fosse feito por host. O script abaixo ajuda a automatizar o processo:

chamada de exemplo

./ 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://sobrelinux.info/questions/774/how-to-disable-strict-host-key-checking-in-ssh"$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
    
por Wolfgang Fahl 25.08.2017 / 14:43

Tags