Tôi muốn vô hiệu hóa kiểm tra khóa máy chủ nghiêm ngặt trong ssh
Ubuntu 11.04. Làm thế nào để làm nó?
ssh -o UserKnownHostsFile=/dev/null
Tôi muốn vô hiệu hóa kiểm tra khóa máy chủ nghiêm ngặt trong ssh
Ubuntu 11.04. Làm thế nào để làm nó?
ssh -o UserKnownHostsFile=/dev/null
Câu trả lời:
Trong của bạn ~/.ssh/config
(nếu tệp này không tồn tại, chỉ cần tạo nó):
Host *
StrictHostKeyChecking no
Điều này sẽ tắt nó cho tất cả các máy chủ bạn kết nối. Bạn có thể thay thế *
bằng mẫu tên máy chủ nếu bạn chỉ muốn áp dụng cho một số máy chủ.
Đảm bảo rằng các quyền trên tệp chỉ giới hạn quyền truy cập vào chính bạn:
sudo chmod 400 ~/.ssh/config
config
trong thư mục nhà của tôi.
.ssh
thư mục con của homedir của bạn.
ssh -o UserKnownHostsFile=/dev/null
Thay vì thêm nó vào ~/.ssh/config
tệp của bạn cho tất cả Máy chủ *, việc chỉ định một máy chủ cụ thể sẽ an toàn hơn.
Bạn cũng có thể truyền tham số trên dòng lệnh như thế này:
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
thay thế.
Thật đáng để chỉ ra rằng thiết lập trong cấu hình ssh của bạn:
StrictHostKeyChecking no
Sẽ có nghĩa là các con chủ vẫn được thêm vào .ssh / know_hosts - bạn sẽ không được nhắc về việc bạn có tin tưởng chúng không, nhưng nếu chủ nhà thay đổi tôi sẵn sàng đặt cược bạn sẽ nhận được cảnh báo lớn về điều đó. Bạn có thể giải quyết vấn đề này bằng cách thêm một tham số khác:
UserKnownHostsFile /dev/null
Điều này sẽ thêm tất cả các máy chủ "mới được phát hiện" vào thùng rác. Nếu một khóa máy chủ thay đổi, không có rắc rối.
Tôi sẽ không hối hận khi đề cập đến việc phá vỡ các cảnh báo này trên các con tin có sự phân nhánh bảo mật rõ ràng - bạn nên cẩn thận rằng bạn đang làm điều đó vì những lý do chính đáng & rằng những gì bạn kết nối thực sự là những gì bạn muốn kết nối và không một máy chủ độc hại, vì tại thời điểm này, bạn đã làm xói mòn một phần chính của bảo mật trong ssh như một giải pháp.
Ví dụ: nếu bạn đã thử và thiết lập điều này với dòng lệnh, lệnh đầy đủ sẽ là:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host
Điều đó sẽ là ngớ ngẩn mặc dù - cho rằng các ví dụ làm việc ở trên cho các tệp cấu hình ssh có thể có ý nghĩa hơn trong mọi trường hợp.
ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host
. Trong trường hợp của tôi, tôi sử dụng issh
để kết nối với máy chủ nơi tôi biết khóa máy chủ thay đổi.
UserKnownHostsFile
không phải vậy UserKnownHostFiles
.
FYI. Tôi thích vô hiệu hóa kiểm tra máy chủ chỉ khi sử dụng cssh.
alias cssh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
cssh
hay ssh
?
-o
không cần thiết?
alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 11086695@172.26.19.19 -p 2222'
làm việc cho tôi
Từ những gì nó nghe như ,
NoHostAuthenticationForLocalhost yes
có thể là đủ tốt, cho bạn. VÀ bạn vẫn có thể duy trì khả năng bảo mật đó.
https://askubfox.com/a/87452/129227 đề nghị sửa đổi tệp cấu hình giúp. Nhưng thay vì mở mọi thứ cho bất kỳ máy chủ nào, tôi muốn việc này được thực hiện trên mỗi máy chủ. Kịch bản dưới đây giúp tự động hóa quá trình:
ví dụ cuộc gọi
./sshcheck somedomain site1 site2 site3
kịch bản 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