Cześć karthick87, mam nadzieję, że rozumiesz konsekwencje wprowadzenia tej zmiany w zakresie bezpieczeństwa;)
Panther
1
Należy jednak zauważyć, że chcesz wiedzieć, czy klucz hosta się zmienił . To duża czerwona flaga, że ktoś może fałszować hosta. Więc UserKnownHostFile / dev / null to naprawdę zły pomysł.
4
Wiesz, SSH służy nie tylko do połączeń zdalnych. Wszystkie hosty, z którymi się łączę, znajdują się w stosie na moim stole i mają ten sam adres IP, więc zawsze mam ostrzeżenie o nowym hoście.
Barafu Albino,
Jeśli chcesz tylko usunąć wiadomość dla określonego hosta, usuń odpowiedni wiersz ~ / .ssh / known_hosts.
stackexchanger
2
Jeśli potrzebujesz tylko jednorazowego połączenia bez błędów:ssh -o UserKnownHostsFile=/dev/null
odinho - Velmont
Odpowiedzi:
227
W swoim ~/.ssh/config(jeśli ten plik nie istnieje, po prostu go utwórz):
Host *
StrictHostKeyChecking no
Spowoduje to wyłączenie wszystkich hostów, z którymi się łączysz. Możesz zastąpić *wzorzec nazwy hosta, jeśli chcesz, aby dotyczył on tylko niektórych hostów.
Upewnij się, że uprawnienia do pliku ograniczają dostęp tylko do ciebie:
W configmoim katalogu domowym nie ma pliku o nazwie .
karthick87
4
Zrób jeden - cała zawartość pliku znajduje się w moim cytacie powyżej. Pamiętaj, że znajduje się on również w .sshpodkatalogu Twojego katalogu domowego.
Cesium
Czy wymagane jest wcięcie? Moje wpisy wyglądają jak bloki podzielone pustą linią.
Andi Giga,
4
W wielu przypadkach jest to nierozsądne, często po prostu chcesz to raz wyłączyć:ssh -o UserKnownHostsFile=/dev/null
Zauważ, że na ogół musisz to zrobić tylko raz na hosta, ponieważ mówi to po raz pierwszy:Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts.
MarkHu
24
To nie zadziała. Powinno być ssh -o UserKnownHostsFile=/dev/nullzamiast.
qwertzguy
1
@qwertzguy To działa. Twoja opcja sprawi, że klucz hosta będzie gubiony za każdym razem, co jest przydatne i bezpieczniejsze, ale nie to, o co pytano.
Jon Bentley,
@qwertzguy Czy możesz dodać to jako odpowiedź, twój jest naprawdę najlepszy na szybkie i brudne „po prostu połącz wiem, co robię”? Nie chciałem ukraść twojej odpowiedzi.
odinho
@ odinho-velmont done
qwertzguy
106
Warto zwrócić uwagę na to ustawienie w konfiguracji ssh:
StrictHostKeyChecking no
Oznacza to, że klucze hostów są nadal dodawane do .ssh / znanych_hostów - po prostu nie zostaniesz zapytany o to, czy im ufasz, ale jeśli hosty się zmienią, jestem gotów się założyć, że dostaniesz duże ostrzeżenie o tym. Możesz obejść ten problem, dodając kolejny parametr:
UserKnownHostsFile /dev/null
Spowoduje to dodanie wszystkich „nowo odkrytych” hostów do kosza. Jeśli klucz hosta ulegnie zmianie, nie będzie żadnych problemów.
Nie wspominam, że obejście tych ostrzeżeń na kluczach hosta ma oczywiste konsekwencje dla bezpieczeństwa - powinieneś być ostrożny, że robisz to z właściwych powodów i że to, z czym się łączysz, jest tym, co chcesz połączyć, a nie złośliwy host, ponieważ w tym momencie zniszczyłeś znaczną część bezpieczeństwa ssh jako rozwiązania.
Na przykład, jeśli spróbujesz ustawić to za pomocą wiersza polecenia, pełne polecenie to:
Byłoby to jednak głupie - biorąc pod uwagę, że powyższe przykłady działania dla plików konfiguracyjnych ssh prawdopodobnie będą miały większy sens we wszystkich przypadkach.
Myślę, że to właściwa odpowiedź. Działa to dobrze w przypadku łączenia się z hostami w prywatnej sieci lokalnej.
Steve Davis
4
Przydałby się alias do ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host. W moim przypadku używam isshdo łączenia się z hostami, gdzie znam zmiany klucza hosta.
ecerulm
1
@ ecerulm - tylko mała literówka: to UserKnownHostsFilenie jest UserKnownHostFiles.
Gray Panther
20
FYI. Wolę wyłączyć sprawdzanie hosta tylko podczas używania cssh.
alias cssh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
https://askubuntu.com/a/87452/129227 sugeruje modyfikację pliku konfiguracyjnego, co pomaga. Ale zamiast otwierać rzeczy dla dowolnego hosta, chciałem, aby to zrobić dla każdego hosta. Poniższy skrypt pomaga zautomatyzować proces:
przykładowe połączenie
./sshcheck somedomain site1 site2 site3
skrypt 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
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
Odpowiedzi:
W swoim
~/.ssh/config
(jeśli ten plik nie istnieje, po prostu go utwórz):Spowoduje to wyłączenie wszystkich hostów, z którymi się łączysz. Możesz zastąpić
*
wzorzec nazwy hosta, jeśli chcesz, aby dotyczył on tylko niektórych hostów.Upewnij się, że uprawnienia do pliku ograniczają dostęp tylko do ciebie:
źródło
config
moim katalogu domowym nie ma pliku o nazwie ..ssh
podkatalogu Twojego katalogu domowego.ssh -o UserKnownHostsFile=/dev/null
Zamiast dodawać go do
~/.ssh/config
pliku dla całego hosta *, bezpieczniej byłoby określić konkretny host.Możesz również przekazać parametr w wierszu polecenia w następujący sposób:
źródło
Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts.
ssh -o UserKnownHostsFile=/dev/null
zamiast.Warto zwrócić uwagę na to ustawienie w konfiguracji ssh:
Oznacza to, że klucze hostów są nadal dodawane do .ssh / znanych_hostów - po prostu nie zostaniesz zapytany o to, czy im ufasz, ale jeśli hosty się zmienią, jestem gotów się założyć, że dostaniesz duże ostrzeżenie o tym. Możesz obejść ten problem, dodając kolejny parametr:
Spowoduje to dodanie wszystkich „nowo odkrytych” hostów do kosza. Jeśli klucz hosta ulegnie zmianie, nie będzie żadnych problemów.
Nie wspominam, że obejście tych ostrzeżeń na kluczach hosta ma oczywiste konsekwencje dla bezpieczeństwa - powinieneś być ostrożny, że robisz to z właściwych powodów i że to, z czym się łączysz, jest tym, co chcesz połączyć, a nie złośliwy host, ponieważ w tym momencie zniszczyłeś znaczną część bezpieczeństwa ssh jako rozwiązania.
Na przykład, jeśli spróbujesz ustawić to za pomocą wiersza polecenia, pełne polecenie to:
Byłoby to jednak głupie - biorąc pod uwagę, że powyższe przykłady działania dla plików konfiguracyjnych ssh prawdopodobnie będą miały większy sens we wszystkich przypadkach.
źródło
ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host
. W moim przypadku używamissh
do łączenia się z hostami, gdzie znam zmiany klucza hosta.UserKnownHostsFile
nie jestUserKnownHostFiles
.FYI. Wolę wyłączyć sprawdzanie hosta tylko podczas używania cssh.
źródło
cssh
czyssh
?-o
nie jest potrzebny?alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] -p 2222'
pracuj dla mnieJeśli chcesz wyłączyć jednorazowo, użyj:
Działa to również w przypadku zmiany klucza hosta i upewni się, że klucz nie zostanie zapisany jako zaufany w celu zwiększenia bezpieczeństwa.
źródło
Z tego, co to brzmi jak ,
może być dla ciebie wystarczająco dobra. I nadal będziesz w stanie zachować pozory bezpieczeństwa.
źródło
https://askubuntu.com/a/87452/129227 sugeruje modyfikację pliku konfiguracyjnego, co pomaga. Ale zamiast otwierać rzeczy dla dowolnego hosta, chciałem, aby to zrobić dla każdego hosta. Poniższy skrypt pomaga zautomatyzować proces:
przykładowe połączenie
./sshcheck somedomain site1 site2 site3
skrypt sshcheck
źródło