Chciałbym wyłączyć ścisłe sprawdzanie klucza hosta w ssh
Ubuntu 11.04. Jak to zrobić?
ssh -o UserKnownHostsFile=/dev/null
Chciałbym wyłączyć ścisłe sprawdzanie klucza hosta w ssh
Ubuntu 11.04. Jak to zrobić?
ssh -o UserKnownHostsFile=/dev/null
Odpowiedzi:
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:
sudo chmod 400 ~/.ssh/config
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:
ssh -o StrictHostKeyChecking=no yourHardenedHost.com
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:
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:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host
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.
ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host
. W moim przypadku używam issh
do łączenia się z hostami, gdzie znam zmiany klucza hosta.
UserKnownHostsFile
nie jest UserKnownHostFiles
.
FYI. Wolę wyłączyć sprawdzanie hosta tylko podczas używania cssh.
alias cssh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
cssh
czy ssh
?
-o
nie jest potrzebny?
alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 11086695@172.26.19.19 -p 2222'
pracuj dla mnie
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
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