Làm thế nào để vô hiệu hóa kiểm tra khóa máy chủ nghiêm ngặt trong ssh?


223

Tôi muốn vô hiệu hóa kiểm tra khóa máy chủ nghiêm ngặt trong sshUbuntu 11.04. Làm thế nào để làm nó?


10
Xin chào karthick87, tôi hy vọng bạn hiểu ý nghĩa bảo mật của việc thực hiện thay đổi đó;)
Panther

1
Tuy nhiên, cần lưu ý rằng bạn muốn biết liệu khóa máy chủ có thay đổi hay không . Đó là một lá cờ đỏ lớn mà ai đó có thể đang giả mạo chủ nhà. Vì vậy, UserKnownhostFile / dev / null là một ý tưởng thực sự tồi tệ.

4
SSH được sử dụng không chỉ cho các kết nối từ xa, bạn biết đấy. Tất cả các máy chủ tôi đang kết nối đều nằm trên bàn và chia sẻ cùng một IP, vì vậy tôi luôn có cảnh báo máy chủ mới.
Barafu Albino

Nếu bạn chỉ muốn xóa tin nhắn cho một máy chủ cụ thể, hãy xóa dòng tương ứng ~ / .ssh / know_hosts.
stackexchanger

2
Nếu bạn chỉ cần thực hiện kết nối một lần mà không gặp lỗi:ssh -o UserKnownHostsFile=/dev/null
odinho - Velmont

Câu trả lời:


227

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

1
Không có tập tin có tên configtrong thư mục nhà của tôi.
karthick87

4
Tạo một - toàn bộ nội dung của tập tin nằm trong trích dẫn của tôi ở trên. Lưu ý rằng nó cũng nằm trong .sshthư mục con của homedir của bạn.
Caesium

Là thụt đầu dòng cần thiết? Các mục của tôi trông giống như các khối được chia cho một dòng trống.
Andi Giga

4
Điều này là không khôn ngoan trong nhiều trường hợp, thường thì bạn chỉ muốn vô hiệu hóa nó một lần:ssh -o UserKnownHostsFile=/dev/null
odinho - Velmont

1
mkdir -p ~ / .ssh && echo "Máy chủ *"> ~ / .ssh / config && echo "StricthostKeyChecking no" >> ~ / .ssh / config
147.3k

189

Thay vì thêm nó vào ~/.ssh/configtệ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

Lưu ý rằng bạn thường chỉ cần thực hiện việc này một lần cho mỗi máy chủ vì nó nói điều này lần đầu tiên:Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts.
MarkHu

24
Điều đó sẽ không làm việc. Nó nên được ssh -o UserKnownHostsFile=/dev/nullthay thế.
qwertzguy

1
@qwertzguy Nó hoạt động. Tùy chọn của bạn sẽ làm cho khóa máy chủ bị mất mỗi lần, điều này hữu ích và an toàn hơn, nhưng không phải là câu hỏi yêu cầu.
Jon Bentley

@qwertzguy Bạn có thể thêm câu này làm câu trả lời không, câu trả lời của bạn thực sự là tốt nhất cho quick'n'denty "chỉ cần kết nối tôi biết tôi đang làm gì"? Không muốn ninja đánh cắp câu trả lời của bạn.
odinho - Velmont

@ odinho-velmont xong
qwertzguy

106

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ự 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.


1
Bạn đã đúng, bạn sẽ nhận được cảnh báo lớn
Freedom_Ben

1
Tôi nghĩ rằng đây là câu trả lời đúng. Điều này hoạt động tốt để kết nối với máy chủ trên một mạng cục bộ riêng.
Steve Davis

4
Có thể thuận tiện để có một bí danh 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.
ecerulm

1
@ecerulm - chỉ là một lỗi đánh máy nhỏ: UserKnownHostsFilekhông phải vậy UserKnownHostFiles.
Grey Panther

20

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'

csshhay ssh?
kenorb

Có thể anh ấy sử dụng cssh.sourceforge.net
MarkHu

Tôi sai, hay là thứ hai -okhông cần thiết?
yckart

1
alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 11086695@172.26.19.19 -p 2222'làm việc cho tôi
arganzheng

9

Nếu bạn muốn vô hiệu hóa trên cơ sở một lần, hãy sử dụng:

ssh -o UserKnownHostsFile=/dev/null

Điều đó cũng sẽ hoạt động nếu khóa máy chủ thay đổi và sẽ đảm bảo không lưu khóa là đáng tin cậy để tăng cường bảo mật.


6

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 đó.


2

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.