Frage Wie schalte ich den strikten Host Key in ssh aus?


Ich möchte den strikten Host Key Check-in deaktivieren ssh für Ubuntu 11.04. Wie es geht?


163
2017-12-13 14:58


Ursprung


Hi karthick87, ich hoffe, du verstehst die Sicherheitsimplikationen dieser Änderung;) - Panther
Es sollte jedoch beachtet werden, dass Sie wollen um zu wissen, ob ein Hostschlüssel vorhanden ist geändert. Das ist eine große rote Fahne, dass jemand den Gastgeber spoofen könnte. Daher ist UserKnownHostFile / dev / null eine wirklich schlechte Idee.
SSH wird nicht nur für Remote-Verbindungen verwendet, wissen Sie. Alle Hosts, mit denen ich eine Verbindung herstelle, befinden sich in einem Heap auf meinem Tisch und teilen sich dieselbe IP-Adresse. Daher habe ich immer die Warnung des neuen Hosts. - Barafu Albino
Wenn Sie nur die Nachricht für einen bestimmten Host entfernen möchten, löschen Sie die entsprechende Zeile ~ / .ssh / known_hosts. - stackexchanger
Wenn Sie nur eine einmalige Verbindung ohne Fehler durchführen müssen: ssh -o UserKnownHostsFile=/dev/null - odinho - Velmont


Antworten:


In deinem ~/.ssh/config (Wenn diese Datei nicht existiert, erstellen Sie sie einfach):

Host *
    StrictHostKeyChecking no

Dadurch wird es für alle Hosts deaktiviert, mit denen Sie eine Verbindung herstellen. Sie können die ersetzen * mit einem Hostnamenmuster, wenn es nur für einige Hosts gelten soll.

Stellen Sie sicher, dass die Berechtigungen für die Datei den Zugriff auf sich selbst beschränken:

sudo chmod 400 ~/.ssh/config

182
2017-12-13 15:16



Es gibt keine Datei namens config in meinem Home-Verzeichnis. - karthick87
Make one - der gesamte Inhalt der Datei sind in meinem Zitat oben. Beachten Sie, dass es in der .ssh Unterverzeichnis Ihres Homedirs. - Caesium
Ist die Einrückung erforderlich? Meine Einträge sehen aus wie Blöcke, die durch eine Leerzeile getrennt sind. - Andi Giga
Dies ist in vielen Fällen unklug, oft möchten Sie es nur einmal deaktivieren: ssh -o UserKnownHostsFile=/dev/null - odinho - Velmont
mkdir -p ~ / .ssh && echo "Host *"> ~ / .ssh / config && echo "StrictHostKeyChecking nein" >> ~ / .ssh / config - Sankarganesh Eswaran


Anstatt es zu Ihrem hinzuzufügen ~/.ssh/config Datei für alle Hosts *, wäre es sicherer, einen bestimmten Host anzugeben.

Sie können einen Parameter in der Befehlszeile auch so übergeben:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com

141
2017-07-25 01:27



Beachten Sie, dass Sie dies in der Regel nur einmal pro Host durchführen müssen, da dies das erste Mal heißt: Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts. - MarkHu
Das wird nicht funktionieren. Es sollte sein ssh -o UserKnownHostsFile=/dev/null stattdessen. - qwertzguy
@qwertzguy Es funktioniert. Ihre Option wird es so machen, dass der Host-Schlüssel jedes Mal verloren geht, was nützlich und sicherer ist, aber nicht das, wonach die Frage gefragt wird. - Jon Bentley
@qwertzguy Könntest du das als Antwort hinzufügen, deine ist wirklich die beste für quick'n'dirty "nur verbinden ich weiß was ich mache"? Ich wollte Ninja nicht deine Antwort stehlen. - odinho - Velmont
@ odinho-velmont getan - qwertzguy


Es ist erwähnenswert:

StrictHostKeyChecking no

Will heißen, dass Host-Schlüssel immer noch zu .ssh / known_hosts hinzugefügt werden - Sie werden einfach nicht gefragt, ob Sie ihnen vertrauen, aber sollten Hosts sich ändern, wette ich, dass Sie die große Warnung bekommen werden. Sie können dieses Problem umgehen, indem Sie einen anderen Parameter hinzufügen:

UserKnownHostsFile /dev/null

Dadurch werden alle diese "neu entdeckten" Hosts dem Papierkorb hinzugefügt. Wenn sich ein Host-Schlüssel ändert, keine Probleme.

Ich wäre nachlässig zu erwähnen, dass die Umgehung dieser Warnungen auf Hostkeys offensichtliche Auswirkungen auf die Sicherheit hat - Sie sollten vorsichtig sein, dass Sie es aus den richtigen Gründen tun, und dass, was Sie tatsächlich verbinden ist Worauf du dich beziehen willst und nicht auf einen bösartigen Host.


80
2017-12-02 23:25



Sie haben Recht, Sie bekommen die große Warnung - Freedom_Ben
Ich denke, das ist die richtige Antwort. Dies funktioniert gut für die Verbindung mit Hosts in einem privaten lokalen Netzwerk. - Steve Davis
Es könnte praktisch sein, einen Alias ​​zu haben ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host. In meinem Fall benutze ich issh mit Hosts verbinden, von denen ich weiß, dass sich der Host-Schlüssel ändert. - ecerulm
@ecerulm - nur ein kleiner Tippfehler: es ist UserKnownHostsFile nicht UserKnownHostFiles. - Grey Panther


FYI. Ich bevorzuge es, die Host-Überprüfung nur bei Verwendung von cssh zu deaktivieren.

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

15
2017-07-18 18:01



cssh oder ssh? - kenorb
Vielleicht benutzt er cssh.sourceforge.de - MarkHu
Bin ich falsch oder ist der zweite -o nicht notwendig? - yckart
alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 11086695@172.26.19.19 -p 2222' arbeite für mich - arganzheng


Wenn Sie auf einmal deaktivieren möchten:

ssh -o UserKnownHostsFile=/dev/null

Dies funktioniert auch, wenn sich der Host-Schlüssel ändert, und stellt sicher, dass der Schlüssel nicht als vertrauenswürdig für zusätzliche Sicherheit gespeichert wird.


6
2017-08-29 15:55





Von was es hört sich an wie,

NoHostAuthenticationForLocalhost yes

könnte sein gut genug für dich. UND Sie könnten immer noch diesen Schein der Sicherheit aufrechterhalten.


4
2017-07-23 20:20





https://askubuntu.com/a/87452/129227 schlagen vor, die Konfigurationsdatei zu ändern, die hilft. Aber anstatt alles für irgendeinen Host zu öffnen, wollte ich das pro Host machen. Das folgende Skript hilft bei der Automatisierung des Prozesses:

Beispiel Anruf

./sshcheck somedomain site1 site2 site3

sshcheck-Skript

#!/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

1
2017-08-25 12:43