Hallo karthick87, ich hoffe du verstehst die sicherheitstechnischen Auswirkungen dieser Änderung;)
Panther
1
Es sollte jedoch beachtet werden, dass Sie wissen möchten , ob sich ein Hostschlüssel geändert hat . Das ist eine große rote Fahne, dass jemand den Host fälscht. UserKnownHostFile / dev / null ist also eine wirklich schlechte Idee.
4
Sie wissen, dass SSH nicht nur für Remoteverbindungen verwendet wird. Alle Hosts, zu denen ich eine Verbindung herstelle, befinden sich auf meinem Tisch und haben dieselbe IP-Adresse. Daher wird immer die Warnung für den neuen Host angezeigt.
Barafu Albino
Wenn Sie die Nachricht nur für einen bestimmten Host entfernen möchten, löschen Sie die entsprechende Zeile ~ / .ssh / known_hosts.
Stackexchanger
2
Wenn Sie nur eine einmalige Verbindung ohne Fehler durchführen müssen:ssh -o UserKnownHostsFile=/dev/null
odinho - Velmont
Antworten:
227
In Ihrem ~/.ssh/config(falls diese Datei nicht existiert, erstellen Sie sie einfach):
Host *
StrictHostKeyChecking no
Dadurch wird es für alle Hosts deaktiviert, zu denen Sie eine Verbindung herstellen. Sie können das *Muster durch ein Hostnamenmuster ersetzen, wenn Sie nur möchten, dass es auf einige Hosts angewendet wird .
Stellen Sie sicher, dass die Berechtigungen für die Datei den Zugriff nur auf Sie selbst beschränken:
configIn meinem Home-Verzeichnis befindet sich keine Datei mit dem Namen .
karthick87
4
Machen Sie eine - der gesamte Inhalt der Datei ist in meinem Zitat oben. Beachten Sie, dass es sich ebenfalls im .sshUnterverzeichnis Ihres Homedir befindet.
Cäsium
Ist die Einrückung erforderlich? Meine Einträge sehen aus wie Blöcke, die durch eine leere Zeile getrennt sind.
Andi Giga
4
Dies ist in vielen Fällen unklug, oft möchten Sie es nur einmal deaktivieren:ssh -o UserKnownHostsFile=/dev/null
Beachten Sie, dass Sie dies in der Regel nur einmal pro Host tun müssen, da dies das erste Mal Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts.
gesagt wird
24
Das geht nicht Es sollte ssh -o UserKnownHostsFile=/dev/nullstattdessen sein.
Qwertzguy
1
@qwertzguy Es funktioniert. Ihre Option bewirkt, dass der Host-Schlüssel jedes Mal verloren geht, was nützlich und sicherer ist, aber nicht das, wonach die Frage gestellt wurde.
Jon Bentley
@qwertzguy Könntest du dies als Antwort hinzufügen, deins ist wirklich das Beste für "Einfach verbinden, ich weiß was ich tue"? Ich wollte deine Antwort nicht ninja-stehlen.
Odinho - Velmont
@ Odinho-Velmont getan
Qwertzguy
106
Es lohnt sich darauf hinzuweisen, dass die Einstellung in Ihrer SSH-Konfiguration:
StrictHostKeyChecking no
Bedeutet, dass Hostkeys immer noch zu .ssh / known_hosts hinzugefügt werden - Sie werden nur nicht gefragt, ob Sie ihnen vertrauen. Sollten sich die Hosts ändern, wette ich, dass Sie eine große Warnung erhalten. Sie können dieses Problem umgehen, indem Sie einen weiteren Parameter hinzufügen:
UserKnownHostsFile /dev/null
Dadurch werden alle diese "neu entdeckten" Hosts in den Papierkorb verschoben. Wenn sich ein Hostschlüssel ändert, treten keine Probleme auf.
Ich möchte nicht erwähnen, dass das Umgehen dieser Warnungen auf Hostschlüsseln offensichtliche Auswirkungen auf die Sicherheit hat. Sie sollten darauf achten, dass Sie dies aus den richtigen Gründen tun und dass das, mit dem Sie sich verbinden, das ist, mit dem Sie sich verbinden und nicht ein bösartiger Host, da Sie zu diesem Zeitpunkt einen Großteil der Sicherheit in ssh als Lösung untergraben haben.
Wenn Sie beispielsweise versuchen, dies über die Befehlszeile festzulegen, lautet der vollständige Befehl:
Ich denke das ist die richtige Antwort. Dies funktioniert gut für die Verbindung mit Hosts in einem privaten lokalen Netzwerk.
Steve Davis
4
Könnte praktisch sein, einen Alias zu haben ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host. In meinem Fall verbinde ich mich isshmit Hosts, bei denen ich weiß, dass sich der Hostschlüssel ändert.
Ecerulm
1
@ecerulm - nur ein kleiner Tippfehler: Es ist UserKnownHostsFilenicht UserKnownHostFiles.
Grey Panther
20
Zu Ihrer Information. Ich bevorzuge es, die Host-Überprüfung nur bei Verwendung von cssh zu deaktivieren.
alias cssh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] -p 2222'Arbeit für mich
arganzheng
9
Wenn Sie die Funktion einmalig deaktivieren möchten, gehen Sie wie folgt vor:
ssh -o UserKnownHostsFile=/dev/null
Dies funktioniert auch, wenn sich der Hostschlüssel ändert, und stellt sicher, dass der Schlüssel aus Sicherheitsgründen nicht als vertrauenswürdig gespeichert wird.
https://askubuntu.com/a/87452/129227 schlagen vor, die Konfigurationsdatei zu ändern, was hilft. Aber anstatt die Dinge für irgendeinen Host zu öffnen, wollte ich, dass dies für jeden Host gemacht wird. Das folgende Skript hilft bei der Automatisierung des Prozesses:
Beispielanruf
./sshcheck somedomain site1 site2 site3
sshcheck script
#!/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
esacfi}## check all servers#
checkservers(){
me=$(hostname -f)for server in $(echo $*| sort)do
os=`uname`case $os in# Mac OS XDarwin*)
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-sshif[-f $sconfig ]then
color_msg $green "$sconfig exists"
ls -l $sconfig
fi}
sconfig=~/.ssh/config
case $# in0) usage ;;1) usage ;;*)
domain=$1
shift
color_msg $blue "checking ssh configuration for domain $domain sites $*"
checkconfig
checkservers $*;;esac
ssh -o UserKnownHostsFile=/dev/null
Antworten:
In Ihrem
~/.ssh/config
(falls diese Datei nicht existiert, erstellen Sie sie einfach):Dadurch wird es für alle Hosts deaktiviert, zu denen Sie eine Verbindung herstellen. Sie können das
*
Muster durch ein Hostnamenmuster ersetzen, wenn Sie nur möchten, dass es auf einige Hosts angewendet wird .Stellen Sie sicher, dass die Berechtigungen für die Datei den Zugriff nur auf Sie selbst beschränken:
quelle
config
In meinem Home-Verzeichnis befindet sich keine Datei mit dem Namen ..ssh
Unterverzeichnis Ihres Homedir befindet.ssh -o UserKnownHostsFile=/dev/null
Anstatt es
~/.ssh/config
für alle Hosts * zu Ihrer Datei hinzuzufügen , ist es sicherer, einen bestimmten Host anzugeben.Sie können auch einen Parameter in der Befehlszeile wie folgt übergeben:
quelle
Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts.
ssh -o UserKnownHostsFile=/dev/null
stattdessen sein.Es lohnt sich darauf hinzuweisen, dass die Einstellung in Ihrer SSH-Konfiguration:
Bedeutet, dass Hostkeys immer noch zu .ssh / known_hosts hinzugefügt werden - Sie werden nur nicht gefragt, ob Sie ihnen vertrauen. Sollten sich die Hosts ändern, wette ich, dass Sie eine große Warnung erhalten. Sie können dieses Problem umgehen, indem Sie einen weiteren Parameter hinzufügen:
Dadurch werden alle diese "neu entdeckten" Hosts in den Papierkorb verschoben. Wenn sich ein Hostschlüssel ändert, treten keine Probleme auf.
Ich möchte nicht erwähnen, dass das Umgehen dieser Warnungen auf Hostschlüsseln offensichtliche Auswirkungen auf die Sicherheit hat. Sie sollten darauf achten, dass Sie dies aus den richtigen Gründen tun und dass das, mit dem Sie sich verbinden, das ist, mit dem Sie sich verbinden und nicht ein bösartiger Host, da Sie zu diesem Zeitpunkt einen Großteil der Sicherheit in ssh als Lösung untergraben haben.
Wenn Sie beispielsweise versuchen, dies über die Befehlszeile festzulegen, lautet der vollständige Befehl:
Das wäre allerdings albern, da die obigen Arbeitsbeispiele für ssh-Konfigurationsdateien wahrscheinlich in allen Fällen sinnvoller sind.
quelle
ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host
. In meinem Fall verbinde ich michissh
mit Hosts, bei denen ich weiß, dass sich der Hostschlüssel ändert.UserKnownHostsFile
nichtUserKnownHostFiles
.Zu Ihrer Information. Ich bevorzuge es, die Host-Überprüfung nur bei Verwendung von cssh zu deaktivieren.
quelle
cssh
oderssh
?-o
unnötig?alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] -p 2222'
Arbeit für michWenn Sie die Funktion einmalig deaktivieren möchten, gehen Sie wie folgt vor:
Dies funktioniert auch, wenn sich der Hostschlüssel ändert, und stellt sicher, dass der Schlüssel aus Sicherheitsgründen nicht als vertrauenswürdig gespeichert wird.
quelle
Wie es sich anhört ,
kann für Sie gut genug sein. UND Sie wären immer noch in der Lage, diesen Anschein von Sicherheit aufrechtzuerhalten.
quelle
https://askubuntu.com/a/87452/129227 schlagen vor, die Konfigurationsdatei zu ändern, was hilft. Aber anstatt die Dinge für irgendeinen Host zu öffnen, wollte ich, dass dies für jeden Host gemacht wird. Das folgende Skript hilft bei der Automatisierung des Prozesses:
Beispielanruf
./sshcheck somedomain site1 site2 site3
sshcheck script
quelle