it-swarm.dev

Jak zakázat přísnou kontrolu klíče hostitele v ssh?

Chci v Ubuntu 11.04 zakázat přísnou kontrolu hostitelských klíčů v ssh. Jak to udělat?

246
karthick87

Ve vašem ~/.ssh/config (pokud tento soubor neexistuje, vytvořte jej):

Host *
    StrictHostKeyChecking no

Vypne to pro všechny hostitele, ke kterým se připojujete. Můžete nahradit * se vzorem názvu hostitele, pokud chcete, aby se vztahoval pouze na některé hostitele.

Ujistěte se, že oprávnění v souboru omezují přístup pouze pro vás:

Sudo chmod 400 ~/.ssh/config
237
Caesium

Spíše než přidání do vašeho ~/.ssh/config soubor pro všechny hostitele *, bylo by bezpečnější určit konkrétního hostitele.

Na příkazovém řádku můžete také předat následující parametr:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com
208
MarkHu

Stojí za to upozornit na toto nastavení ve vaší ssh konfiguraci:

StrictHostKeyChecking no

Bude to znamenat, že hostesky jsou stále přidávány do .ssh/known_hosts - prostě nebudete vyzváni, zda jim důvěřujete, ale pokud by se hostitelé změnili, jsem ochoten se vsadit, že na to dostanete velké varování. Tento problém můžete vyřešit přidáním jiného parametru:

UserKnownHostsFile /dev/null

To přidá všechny tyto „nově objevené“ hostitele do koše. Pokud se změní klíč hostitele, žádné potíže.

Ráda bych zmínil, že obcházení těchto varování na hostitelských počítačích má zjevné bezpečnostní důsledky - měli byste být opatrní, že to děláte ze správných důvodů a že to, k čemu se vlastně připojujete is co máte na mysli připojení a ne škodlivého hostitele, protože v tomto okamžiku jste jako řešení narušili hlavní část zabezpečení v ssh.

Pokud byste to například zkusili nastavit pomocí příkazového řádku, plný příkaz by byl:

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected]

To by ale bylo hloupé - vzhledem k tomu, že výše uvedené příklady práce s konfiguračními soubory ssh budou pravděpodobně mít větší smysl ve všech případech.

114
pacifist

FYI. Dávám přednost zakázání kontroly hostitele právě při použití cssh.

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

Pokud chcete zakázat jednorázově, použijte:

ssh -o UserKnownHostsFile=/dev/null

To bude fungovat také v případě, že se změní klíč hostitele a ujistíte se, že klíč nebude uložen jako důvěryhodný pro zvýšení bezpečnosti.

9
qwertzguy

Z čeho to zní jako,

NoHostAuthenticationForLocalhost yes

může být dost dobrý, pro vás. A stále byste si mohli udržet tu zdání bezpečnosti.

6
alex gray

https://askubuntu.com/a/87452/129227 navrhnout úpravu konfiguračního souboru, který pomáhá. Ale místo toho, abych otevřel věci pro každého hostitele, chtěl jsem, aby se to stalo za hostitele. Skript níže pomáhá automatizovat proces:

příklad volání

./sshcheck someedomain site1 site2 site3

skript 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