Questão Como desativar a verificação de chave de host estrito no ssh?


Gostaria de desabilitar a verificação estrita da chave do host ssh para o Ubuntu 11.04. Como fazer isso?


164
2017-12-13 14:58


origem


Oi karthick87, espero que você entenda as implicações de segurança de fazer essa mudança;) - Panther
Deve-se notar, no entanto, que você quer para saber se uma chave de host mudou. Essa é uma grande bandeira vermelha que alguém pode estar falsificando o host. Então, UserKnownHostFile / dev / null é uma péssima ideia.
O SSH é usado não apenas para conexões remotas, você sabe. Todos os hosts aos quais estou conectando estão em heap na minha tabela e compartilham o mesmo IP, portanto, sempre tenho o novo aviso de host. - Barafu Albino
Se você quiser apenas remover a mensagem de um determinado host, exclua a linha correspondente ~ / .ssh / known_hosts. - stackexchanger
Se você só precisa fazer uma conexão única sem erros: ssh -o UserKnownHostsFile=/dev/null - odinho - Velmont


Respostas:


Na tua ~/.ssh/config (se este arquivo não existir, basta criá-lo):

Host *
    StrictHostKeyChecking no

Isso irá desativá-lo para todos os hosts aos quais você se conectar. Você pode substituir o * com um padrão de nome de host se você quiser que ele seja aplicado apenas a alguns hosts.

Verifique se as permissões no arquivo restringem o acesso somente a você:

sudo chmod 400 ~/.ssh/config

182
2017-12-13 15:16



Não há nenhum arquivo chamado config no meu diretório home. - karthick87
Faça um - todo o conteúdo do arquivo está na minha citação acima. Note que está no .ssh subdiretório do seu homedir também. - Caesium
O recuo é necessário? Minhas entradas parecem blocos divididos por uma linha vazia. - Andi Giga
Isso é insensato em muitos casos, muitas vezes você só quer desativá-lo uma vez: ssh -o UserKnownHostsFile=/dev/null - odinho - Velmont
mkdir -p ~ / .ssh && echo "Host *"> ~ / .ssh / config && echo "StrictHostKeyChecking não" >> ~ / .ssh / config - Sankarganesh Eswaran


Em vez de adicioná-lo ao seu ~/.ssh/config arquivo para todos os hosts *, seria mais seguro especificar um host específico.

Você também pode passar um parâmetro na linha de comando assim:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com

141
2017-07-25 01:27



Note que você geralmente só precisa fazer isso uma vez por host, já que diz isso pela primeira vez: Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts. - MarkHu
Isso não vai funcionar. Deveria ser ssh -o UserKnownHostsFile=/dev/null em vez de. - qwertzguy
@qwertzguy Isso funciona. Sua opção fará com que a chave do host seja perdida a cada vez, o que é útil e mais seguro, mas não o que a pergunta solicitada. - Jon Bentley
@qwertzguy Você poderia adicionar isso como resposta, o seu é realmente o melhor para quick'n'dirty "apenas conecte eu sei o que estou fazendo"? Não quero roubar ninja sua resposta. - odinho - Velmont
@ odinho-velmont feito - qwertzguy


Vale a pena ressaltar que:

StrictHostKeyChecking no

Significará que chaves de host ainda serão adicionadas a .ssh / known_hosts - você não será questionado se confia nelas, mas se os hosts mudarem, estou disposto a apostar que você receberá um grande aviso sobre isso. Você pode contornar esse problema adicionando outro parâmetro:

UserKnownHostsFile /dev/null

Isso adicionará todos esses hosts "recém-descobertos" à lixeira. Se uma chave de host mudar, sem problemas.

Eu seria negligente em não mencionar que contornar esses avisos nas chaves do host tem ramificações óbvias de segurança - você deve ter cuidado para não fazer isso pelas razões certas e com o que está se conectando. é o que você quer se conectar e não um host mal-intencionado.


81
2017-12-02 23:25



Você está correto, você recebe o grande aviso - Freedom_Ben
Eu acho que esta é a resposta certa. Isso funciona bem para conectar-se a hosts em uma rede local privada. - Steve Davis
Pode ser conveniente ter um alias para ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host. No meu caso eu uso issh para se conectar a hosts onde eu sei que a chave do host muda. - ecerulm
@ecerulm - apenas um pequeno erro de digitação: é UserKnownHostsFile não UserKnownHostFiles. - Grey Panther


PARA SUA INFORMAÇÃO. Eu prefiro desabilitar a verificação do host apenas quando estiver usando o cssh.

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

15
2017-07-18 18:01



cssh ou ssh? - kenorb
Talvez ele use cssh.sourceforge.net - MarkHu
Estou errado ou é o segundo -o desnecessário? - yckart
alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 11086695@172.26.19.19 -p 2222' trabalhe para mim - arganzheng


Se você quiser desabilitar em uma base de tempo use:

ssh -o UserKnownHostsFile=/dev/null

Isso também funcionará se a chave do host for alterada e não salvará a chave como confiável para maior segurança.


6
2017-08-29 15:55





Do que soa como,

NoHostAuthenticationForLocalhost yes

talvez bom o suficiente para você. E você ainda seria capaz de manter essa aparência de segurança.


4
2017-07-23 20:20





https://askubuntu.com/a/87452/129227 sugiro modificar o arquivo de configuração que ajuda. Mas, em vez de abrir as portas para qualquer host, eu queria que isso fosse feito por host. O script abaixo ajuda a automatizar o processo:

exemplo de chamada

./sshcheck somedomain site1 site2 site3

script 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

1
2017-08-25 12:43