Як відключити сувору перевірку ключа хоста в ssh?


223

Я хотів би відключити чітку реєстрацію ключів хоста sshдля Ubuntu 11.04. Як це зробити?


10
Привіт karthick87, сподіваюся, ти розумієш наслідки для внесення змін до безпеки;)
Пантера

1
Слід зазначити, що ви хочете знати, чи змінився ключ хоста . Це великий червоний прапор, який хтось може підробляти господаря. Тож UserKknownHostFile / dev / null - це дуже погана ідея.

4
SSH використовується не тільки для віддалених з'єднань, ви знаєте. Усі хости, до яких я підключаюсь, знаходяться в купі мого столу та мають однаковий IP-адресу, тому у мене завжди є нове попередження про хост.
Барафу Альбіно

Якщо ви просто хочете видалити повідомлення для певного хоста, видаліть відповідний рядок ~ / .ssh / known_hosts.
stackexchanger

2
Якщо вам просто потрібно одноразово підключитися без помилок:ssh -o UserKnownHostsFile=/dev/null
odinho - Велмонт

Відповіді:


227

У своєму ~/.ssh/config(якщо цього файлу не існує, просто створіть його):

Host *
    StrictHostKeyChecking no

Це вимкне його для всіх хостів, до яких ви підключаєтесь. Ви можете замінити *шаблон імені хоста, якщо ви хочете, щоб він застосовано лише до деяких хостів.

Переконайтеся, що дозволи на файл обмежують доступ лише до вас:

sudo chmod 400 ~/.ssh/config

1
У configмоєму домашньому каталозі не вказано жодного файлу .
karthick87

4
Зробіть одну - весь вміст файлу міститься в моїй цитаті вище. Зверніть увагу, що він також знаходиться у .sshпідкаталозі вашого hededir.
Цезій

Чи потрібен відступ? Мої записи виглядають як блоки, розділені порожнім рядком.
Andi Giga

4
У багатьох випадках це нерозумно, часто просто хочеться один раз відключити його:ssh -o UserKnownHostsFile=/dev/null
odinho - Велмонт,

1
mkdir -p ~ / .ssh && echo "Хост *"> ~ / .ssh / config && echo "StrictHostKeyChecking ні" >> ~ / .ssh / config
147.3k

189

Замість того, щоб додати його у ~/.ssh/configфайл для всіх Host *, безпечніше було б вказати конкретного хоста.

Ви також можете передавати параметр у командному рядку таким чином:

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 Чи можете ви додати це як відповідь, ваш справді найкращий для quick'n'dirty "просто підключиться, я знаю, що я роблю"? Не хотів ніндзя вкрасти вашу відповідь.
odinho - Велмонт

@ odinho-velmont done
qwertzguy

106

Варто зазначити, що налаштування у вашому конфігурації ssh:

StrictHostKeyChecking no

Буде означати, що хост-ключі все ще додаються до .ssh / known_hosts - вам просто не буде запропоновано запитувати, чи ви їм довіряєте, але якщо хости змінюються, я готовий зробити ставку, ви отримаєте велике попередження про це. Ви можете подолати цю проблему, додавши інший параметр:

UserKnownHostsFile /dev/null

Це додасть усіх цих "нещодавно відкритих" хостів у сміттєвий контейнер. Якщо ключ хоста зміниться, ніяких проблем.

Я не хочу згадувати, що обхід цих попереджень на хост-ключах має очевидні наслідки для безпеки - ви повинні бути обережні, що ви робите це з правильних причин, і що те, що ви підключаєте насправді, це те, що ви маєте на увазі підключитись, а не шкідливий хост, оскільки в цей момент ви порушили основну частину безпеки в ssh як рішення.

Наприклад, якщо ви намагалися встановити це за допомогою командного рядка, повною командою було б:

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

Це було б нерозумно - враховуючи, що робочі приклади, наведені вище для файлів ssh config, ймовірно, матимуть більше сенсу у всіх випадках.


1
Ви маєте рацію, ви отримуєте велике попередження
Freedom_Ben

1
Я думаю, що це правильна відповідь. Це добре працює для підключення до хостів у приватній локальній мережі.
Стів Девіс

4
Можливо, зручно мати псевдонім до ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host. У моєму випадку я використовую isshдля підключення до хостів, де я знаю, що змінюється ключ хоста.
ecerulm

1
@ecerulm - лише невелика помилка: це UserKnownHostsFileне так UserKnownHostFiles.
Сіра Пантера

20

FYI. Я вважаю за краще вимкнути перевірку хосту саме під час використання 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.