Как отключить строгую проверку ключа хоста в ssh?

Я хотел бы отключить строгую проверку ключа хоста ssh для Ubuntu 11.04. Как это сделать?

В вашем ~/.ssh/config (если этот файл не существует, просто создайте его):

Host *    StrictHostKeyChecking no

Это отключит его для всех хостов, к которым вы подключаетесь. Вы можете заменить * с шаблоном имени хоста, если вы хотите, чтобы он применялся только к некоторым хостам.

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

sudo chmod 400 ~/.ssh/config

Вместо того, чтобы добавлять его в свой ~/.ssh/config файл для всех хостов *, было бы безопаснее указать конкретный хост.

Вы также можете передать параметр в командной строке следующим образом:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com

Это автоматически добавит ключ хоста в ваш файл known_hosts, если его там еще нет.

Если есть несоответствие, он отобразит большое предупреждение и не обновит known_hosts. Это также отключит аутентификацию на основе пароля, чтобы предотвратить атаки MITM. Однако аутентификация по закрытому ключу все равно будет проходить автоматически, чего вы, возможно, не захотите.

Стоит указать на этот параметр в вашей конфигурации ssh:

StrictHostKeyChecking no

Это будет означать, что ключи хоста по-прежнему добавляются в .ssh / known_hosts - вам просто не будет предложено узнать, доверяете ли вы им, но если хосты изменятся, я готов поспорить, что вы получите большое предупреждение об этом. Вы можете обойти эту проблему, добавив другой параметр:

UserKnownHostsFile /dev/null

Это добавит все эти "недавно обнаруженные" хосты в корзину. Если ключ хоста изменится, никаких проблем.

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

Например, если бы вы попытались установить это с помощью командной строки, полная команда была бы:

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

Это было бы глупо, хотя - учитывая, что приведенные выше рабочие примеры для конфигурационных файлов ssh, вероятно, будут иметь больше смысла во всех случаях.

к вашему сведению. Я предпочитаю отключать проверку хоста только при использовании cssh.

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

Если вы хотите отключить на одноразовой основе, используйте:

ssh -o UserKnownHostsFile=/dev/null

Это также сработает, если ключ хоста изменится, и убедитесь, что ключ не сохранен как доверенный для дополнительной безопасности.

От того, что это звучит как,

NoHostAuthenticationForLocalhost yes

может быть достаточно хорошо для тебя. И вы все равно смогли бы поддерживать это подобие безопасности.

https://askubuntu.com/a/87452/129227 предложите изменить конфигурационный файл, который поможет. Но вместо того, чтобы открывать что-то для любого хоста, я хотел, чтобы это делалось для каждого хоста. Приведенный ниже скрипт помогает автоматизировать процесс:

пример вызова

./sscheck somedomain сайт1 сайт2 сайт3

скрипт sscheck

#!/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.htmlblue='\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 displayerror() {  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"  fidone}## 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/configcase  $# in  0) usage ;;  1) usage ;;  *)     domain=$1     shift     color_msg $blue "checking ssh configuration for domain $domain sites $*"    checkconfig    checkservers $*     ;;esac

Привет, karthick87, я надеюсь, вы понимаете последствия этого изменения для безопасности :wink:

Вы знаете, что SSH используется не только для удаленных подключений. Все хосты, к которым я подключаюсь, находятся в куче на моем столе и имеют один и тот же IP-адрес, поэтому у меня всегда есть предупреждение о новом хосте.

Если вам просто нужно выполнить одноразовое подключение без ошибок: ssh -o UserKnownHostsFile=/dev/null

Однако следует отметить, что вы ** хотите ** знать, изменился ли ключ хоста *. Это большой красный флаг, указывающий на то, что кто-то может подделывать хост. Так что UserKnownHostFile /dev/null - действительно плохая идея.

Спасибо @odinho-Velmont, мне нужно было сделать это при обратном туннелировании с нескольких разных хостов на один и тот же локальный порт (конечно, по одному за раз). Без этого сервер жалуется при подключении с использованием одних и тех же учетных данных к разным серверам.

Конечно, для этого вопроса есть веские причины, но заметное предупреждение помогает защитить людей, когда они заходят на эту страницу по неправильной причине.

Если вы просто хотите удалить сообщение для определенного хоста, удалите соответствующую строку ~/.ssh/known_hosts.