Câu hỏi Làm cách nào để tắt tính năng kiểm tra khóa máy chủ nghiêm ngặt trong ssh?


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


164
2017-12-13 14:58


gốc


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
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. Đó là một lá cờ đỏ lớn mà ai đó có thể đang lừa đảo người dẫn chương trình. Vì vậy, UserKnownHostFile / dev / null là một ý tưởng thực sự tồi.
SSH được sử dụng không chỉ cho các kết nối từ xa, bạn biết. Tất cả các máy chủ mà tôi kết nối đều nằm trong bảng trên cùng một bảng 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 thư cho một máy chủ cụ thể, hãy xóa dòng tương ứng ~ / .ssh / known_hosts. - stackexchanger
Nếu bạn chỉ cần thực hiện kết nối một lần mà không có lỗi: ssh -o UserKnownHostsFile=/dev/null - odinho - Velmont


Các câu trả lời:


Trong của bạn ~/.ssh/config (nếu tập tin này không tồn tại, chỉ cần tạo nó):

Host *
    StrictHostKeyChecking no

Thao tác này sẽ tắt cho tất cả các máy chủ mà bạn kết nối. Bạn có thể thay thế * với mẫu tên máy chủ lưu trữ nếu bạn chỉ muốn áp dụng cho một số máy chủ lưu trữ.

Đảm bảo 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

182
2017-12-13 15:16



Không có tệp nào có tên config trong thư mục chính của tôi. - karthick87
Làm cho một - toàn bộ nội dung của tập tin nằm trong báo giá của tôi ở trên. Lưu ý nó trong .ssh thư mục con của homedir của bạn. - Caesium
Thụt lề có cần thiết không? Các mục nhập của tôi trông giống như các khối chia cho một dòng trống. - Andi Giga
Điều này là không khôn ngoan trong nhiều trường hợp, thường bạn chỉ muốn vô hiệu hóa nó một lần: ssh -o UserKnownHostsFile=/dev/null - odinho - Velmont
mkdir -p ~ / .ssh && echo "Máy chủ *"> ~ / .ssh / config && echo "StrictHostKeyChecking no" >> ~ / .ssh / config - Sankarganesh Eswaran


Thay vì thêm nó vào ~/.ssh/config tệp cho tất cả Máy chủ *, sẽ an toàn hơn khi chỉ định một máy chủ cụ thể.

Bạn cũng có thể chuyển một tham số trên dòng lệnh như sau:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com

141
2017-07-25 01:27



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ủ kể từ khi nó cho biết đây là lần đầu tiên: Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts. - MarkHu
Điều đó sẽ không hoạt động. Nó phải là ssh -o UserKnownHostsFile=/dev/null thay thế. - qwertzguy
@qwertzguy Nó hoạt động. Tùy chọn của bạn sẽ làm cho nó để các khóa máy chủ bị mất mỗi lần, đó là hữu ích và an toàn hơn, nhưng không phải là những gì các câu hỏi yêu cầu. - Jon Bentley
@qwertzguy Bạn có thể thêm điều này như là một câu trả lời, bạn thực sự là tốt nhất cho quick'n'dirty "chỉ cần kết nối tôi biết những gì tôi đang làm"? Không muốn ninja ăn cắp câu trả lời của bạn. - odinho - Velmont
@ odinho-velmont đã hoàn thành - qwertzguy


Điều đáng nói là:

StrictHostKeyChecking no

Có nghĩa là các hostkey vẫn được thêm vào .ssh / known_hosts - bạn sẽ không bị nhắc về việc liệu bạn có tin tưởng chúng hay không, nhưng nên thay đổi host tôi sẵn sàng đặt cược bạn sẽ nhận được cảnh báo lớn về nó. Bạn có thể khắc phục sự cố này bằng cách thêm thông số khác:

UserKnownHostsFile /dev/null

Thao tác này sẽ thêm tất cả các máy chủ "mới được phát hiện" này 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 nhắc đến việc phá vỡ những cảnh báo này trên các hostkey có các phân nhánh bảo mật rõ ràng - bạn nên cẩn thận rằng bạn đang thực hiện nó vì những lý do chính đáng và rằng những gì bạn đang kết nối với thực tế  những gì bạn có nghĩa là để kết nối và không phải là một máy chủ độc hại.


81
2017-12-02 23:25



Bạn nói đúng, bạn nhận được cảnh báo lớn - Freedom_Ben
Tôi nghĩ đâ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ạng cục bộ riêng. - Steve Davis
Có thể thuận tiện để có 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ủ lưu trữ nơi tôi biết các thay đổi chủ của máy chủ lưu trữ. - ecerulm
@ecerulm - chỉ là một lỗi nhỏ: đó là UserKnownHostsFile không phải UserKnownHostFiles. - Grey Panther


FYI. Tôi thích vô hiệu hóa việc kiểm tra máy chủ ngay khi sử dụng cssh.

alias cssh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'

15
2017-07-18 18:01



cssh hoặc là ssh? - kenorb
Có lẽ anh ta sử dụng cssh.sourceforge.net - MarkHu
Tôi có sai hay là người thứ hai -o không cần thiết? - yckart
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


Nếu bạn muốn vô hiệu hóa trên cơ sở một lần 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
2017-08-29 15:55





Từ những gì nó nghe như là,

NoHostAuthenticationForLocalhost yes

có lẽ đủ tốt, cho bạn. VÀ bạn vẫn có thể duy trì sự an toàn đó.


4
2017-07-23 20:20





https://askubuntu.com/a/87452/129227 đề nghị sửa đổi tập tin 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 điều này được thực hiện cho mỗi máy chủ. Kịch bản bên dưới giúp tự động hóa quy trình:

cuộc gọi ví dụ

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

1
2017-08-25 12:43