ssh에서 엄격한 호스트 키 검사를 비활성화하는 방법은 무엇입니까?


223

sshUbuntu 11.04 에서 엄격한 호스트 키 체크인을 비활성화하고 싶습니다 . 어떻게합니까?


10
안녕 karthick87, 나는 당신이 그 변화를 만드는 보안의 의미를 이해하기를 바랍니다;)
Panther

1
그러나 호스트 키가 변경 되었는지 알고 싶습니다 . 누군가가 호스트를 스푸핑 할 수있는 큰 위험 신호입니다. 따라서 UserKnownHostFile / dev / null은 정말 나쁜 생각입니다.

4
SSH는 원격 연결에만 사용되는 것이 아닙니다. 연결하려는 모든 호스트가 테이블에 힙으로 있고 동일한 IP를 공유하므로 항상 새로운 호스트 경고가 표시됩니다.
Barafu Albino

특정 호스트에 대한 메시지를 제거하려면 해당 행 ~ / .ssh / known_hosts를 삭제하십시오.
stackexchanger

2
오류없이 일회성 연결을 수행해야하는 경우 :ssh -o UserKnownHostsFile=/dev/null
odinho-Velmont

답변:


227

귀하의 ~/.ssh/config(이 파일이 존재하지 않으면 작성하십시오) :

Host *
    StrictHostKeyChecking no

연결하는 모든 호스트에 대해 전원이 꺼집니다. *일부 호스트에만 적용하려는 경우 호스트 이름 패턴으로 바꿀 수 있습니다 .

파일에 대한 권한이 자신에게만 액세스를 제한해야합니다.

sudo chmod 400 ~/.ssh/config

1
config내 홈 디렉토리에 이름이 지정된 파일이 없습니다 .
karthick87

4
하나를 만드십시오-파일의 전체 내용은 위의 인용문에 있습니다. .sshhomedir 의 하위 디렉토리에도 있습니다.
세슘

들여 쓰기가 필요합니까? 내 항목은 빈 줄로 나눈 블록처럼 보입니다.
Andi Giga

4
이것은 많은 경우 현명하지 ssh -o UserKnownHostsFile=/dev/null
못하며

1
mkdir -p ~ / .ssh && echo "Host *"> ~ / .ssh / config && echo "StrictHostKeyChecking no">> ~ / .ssh / config
147.3k

189

~/.ssh/config모든 호스트 *에 대해 파일에 파일을 추가하는 대신 특정 호스트를 지정하는 것이 더 안전합니다.

다음과 같이 명령 행에서 매개 변수를 전달할 수도 있습니다.

ssh -o StrictHostKeyChecking=no yourHardenedHost.com

일반적으로 호스트 당 처음 한 번만 수행하면됩니다.Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts.
MarkHu

24
작동하지 않습니다. ssh -o UserKnownHostsFile=/dev/null대신 해야합니다 .
qwertzguy

1
@qwertzguy 작동합니다. 귀하의 옵션은 매번 호스트 키가 손실되도록 유용하고 더 안전하지만 질문이 요구하는 것은 아닙니다.
존 벤틀리

@qwertzguy이 질문에 대한 답변을 추가해 주시겠습니까? 귀하의 답변은 "내가하는 일을 알기 만하면됩니다." 닌자가 답변을 훔치고 싶지 않았습니다.
odinho-Velmont

@ odinho-velmont 님
qwertzguy 2016 년

106

ssh 설정에서 해당 설정을 지적 할 가치가 있습니다.

StrictHostKeyChecking no

호스트 키가 여전히 .ssh / known_hosts에 추가된다는 것을 의미합니다. 신뢰 여부에 대한 메시지가 표시되지 않지만 호스트가 변경되면 큰 경고가 표시됩니다. 다른 매개 변수를 추가하여이 문제점을 해결할 수 있습니다.

UserKnownHostsFile /dev/null

이렇게하면이 "새로 검색된"호스트가 모두 휴지통에 추가됩니다. 호스트 키가 변경되면 아무런 문제가 없습니다.

나는 hostkeys에 이러한 경고를 우회하는 것은 명백한 보안 파급 효과를 가지고 말할 것도없고 태만 될 것이다 - 당신은 당신이 바로 그 이유 & 것을 그것을하고 있다는 것을주의해야한다 무엇을 연결하는 것은 실제로하는 것입니다 당신이하지 연결하기 위해 무엇을 의미하는지 이 시점에서 당신은 ssh의 보안의 주요 부분을 솔루션으로 침식했기 때문에 악의적 인 호스트.

예를 들어 명령 줄을 사용하여이를 설정하려고하면 전체 명령은 다음과 같습니다.

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host

ssh 구성 파일에 대한 위의 작업 예제가 모든 경우에 더 의미가 있다고 가정 할 때 그것은 어리석은 일입니다.


1
맞습니다, 큰 경고를
받습니다

1
이것이 정답이라고 생각합니다. 개인 로컬 네트워크의 호스트에 연결하는 데 효과적입니다.
Steve Davis

4
에 별칭을 사용하는 것이 편리 할 수 ​​있습니다 ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host. 필자의 경우 issh호스트 키 변경 사항을 알고있는 호스트에 연결 하는 데 사용합니다.
ecerulm

1
@ecerulm-단지 작은 오타가 UserKnownHostsFile아닙니다 UserKnownHostFiles.
그레이 팬더

20

참고로 cssh를 사용할 때만 호스트 검사를 비활성화하는 것을 선호합니다.

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

cssh또는 ssh?
kenorb

아마 그는 cssh.sourceforge.net
MarkHu

내가 틀렸 -o습니까 , 아니면 두 번째가 불필요합니까?
yckart

1
alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 11086695@172.26.19.19 -p 2222'나를 위해 일
arganzheng

9

한 번에 비활성화하려면 다음을 사용하십시오.

ssh -o UserKnownHostsFile=/dev/null

호스트 키가 변경되는 경우에도 작동하며 추가 보안을 위해 키를 신뢰할 수있는 것으로 저장하지 않아야합니다.


6

그것은 어떤에서 같은 소리 ,

NoHostAuthenticationForLocalhost yes

당신을 위해 충분할 수도 있습니다 . 그리고 당신은 여전히 ​​그 보안의 유사성을 유지할 수 있습니다.


2

https://askubuntu.com/a/87452/129227 은 구성 파일을 수정하도록 제안합니다. 그러나 모든 호스트를 위해 일을 여는 대신 호스트 별로이 작업을 수행하기를 원했습니다. 아래 스크립트는 프로세스 자동화에 도움이됩니다.

전화 예

./sshcheck somedomain site1 site2 site3

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.