Sıkı anasistem anahtarı denetimi ssh'de nasıl devre dışı bırakılır?


223

sshUbuntu 11.04 için sıkı ana bilgisayar anahtarını devre dışı bırakmak istiyorum . Nasıl yapılır?


10
Selam karthick87, umarım bu değişikliği yapmanın güvenlik etkilerini anlarsınız;)
Panther

1
Bununla birlikte, bir ana bilgisayar anahtarının değişip değişmediğini bilmek istediğinize dikkat edilmelidir . Bu, birisinin konağı sahtekarlığa sokabileceği büyük bir kırmızı bayrak. Yani UserKnownHostFile / dev / null gerçekten kötü bir fikir.

4
SSH sadece uzak bağlantılar için kullanılmıyor, biliyorsunuz. Bağlandığım tüm ana bilgisayarlar masamın üzerinde yığın halinde ve aynı IP'yi paylaşıyorlar, bu yüzden her zaman yeni ana bilgisayar uyarısı aldım.
Barafu Albino 10:14

Yalnızca belirli bir ana bilgisayarın mesajını kaldırmak istiyorsanız, karşılık gelen satırı ~ / .ssh / known_hosts dosyasını silin.
stackexchanger

2
Sadece bir defalık hatasız bağlantı yapmanız gerekiyorsa:ssh -o UserKnownHostsFile=/dev/null
odinho - Velmont

Yanıtlar:


227

Sizde ~/.ssh/config(eğer bu dosya mevcut değilse, sadece oluşturun):

Host *
    StrictHostKeyChecking no

Bu, bağlandığınız tüm ana bilgisayarlar için kapanacaktır. *Yalnızca bazı ana bilgisayarlara uygulanmasını istiyorsanız, onu bir ana bilgisayar adı düzeniyle değiştirebilirsiniz .

Dosyadaki izinlerin yalnızca kendinize erişimi kısıtladığından emin olun:

sudo chmod 400 ~/.ssh/config

1
configAna dizinde adında dosya yok .
karthick87

4
Bir tane yap - dosyanın tüm içeriği yukarıdaki alıntımda. Ayrıca .ssh, homedir'inizin alt dizininde olduğuna dikkat edin.
Sezyum

Girinti gerekli mi? Girişlerim boş bir satıra bölünen bloklara benziyor.
Andi Giga

4
Bu pek çok durumda akıllıca değildir, çoğu zaman sadece bir kez devre dışı bırakmak istersiniz:ssh -o UserKnownHostsFile=/dev/null
odinho - Velmont

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

189

~/.ssh/configTüm Ana Bilgisayar * için dosyanızı dosyaya eklemek yerine , belirli bir ana bilgisayarı belirtmek daha güvenli olur.

Ayrıca aşağıdaki gibi komut satırında bir parametre iletebilirsiniz:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com

Bunu ilk defa söylediğinden beri genellikle bunu yalnızca ana bilgisayar başına bir kez yapmanız gerektiğini unutmayın:Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts.
MarkHu

24
Bu işe yaramaz. Bunun ssh -o UserKnownHostsFile=/dev/nullyerine olmalı .
qwertzguy

1
@ qwertzguy İşe yarıyor. Seçeneğiniz, ana bilgisayar anahtarının her seferinde kaybolması, kullanışlı ve daha güvenli, ancak sorulanın sorulmaması için yapacaktır.
Jon Bentley

@qwertzguy Bunu bir cevap olarak ekleyebilir misiniz, sizinki "quick'n'dirty için gerçekten en iyisidir" sadece bağlanıyorum ne yaptığımı biliyorum "? Cevabını ninja çalmak istemedi.
odinho - Velmont

@ odinho-velmont bitti
qwertzguy

106

Ssh config'inizdeki o ayarı işaret etmeye değer:

StrictHostKeyChecking no

Ana bilgisayar anahtarlarının hala .ssh / known_hosts öğesine eklendiği anlamına gelir - yalnızca onlara güvenip güvenmediğiniz sorulmaz, ancak ana bilgisayar değiştirilirse bahse girerim ki bu konuda büyük bir uyarı alırsınız. Başka bir parametre ekleyerek bu sorunu çözebilirsiniz:

UserKnownHostsFile /dev/null

Bu, tüm bu "yeni keşfedilen" ana bilgisayarları çöp kutusuna ekleyecektir. Bir ana bilgisayar anahtarı değişirse, sorun olmaz.

Ben hostkeys üzerinde bu uyarıları engellemeyi bariz güvenlik sonuçları olduğunu belirtmeyi dikkatsiz olurdu - Eğer doğru nedenlerle & o yapıyor olmamız dikkatli olmalıdır ne bağlıyoruz aslında hiç olduğunu size değil bağlamak için ne anlama geldiğini Kötü niyetli bir ana bilgisayar, bu noktada ssh içindeki güvenliğin büyük bir bölümünü bir çözüm olarak erittiğinizden beri.

Örneğin, bunu komut satırına ayarlamaya çalışacak olursanız, tam komut şöyle olacaktır:

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

Bu aptalca olurdu - ssh config dosyaları için yukarıdaki çalışma örneklerinin her durumda daha anlamlı olacağı düşünülürse.


1
Haklısın, büyük uyarı alıyorsun
Freedom_Ben

1
Bence bu doğru cevap. Bu, özel bir yerel ağdaki ana bilgisayarlara bağlanmak için iyi çalışır.
Steve Davis

4
Takma adı olması uygun olabilir ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host. Benim durumumda issh, ana bilgisayar anahtarının değiştiğini bildiğim ana bilgisayarlara bağlanmak için kullanıyorum .
ecerulm

1
@ ecerulm - sadece küçük bir yazım hatası: öyle UserKnownHostsFiledeğil UserKnownHostFiles.
Gri Panter

20

Bilginize. Sadece cssh kullanılırken ana bilgisayar kontrolünü devre dışı bırakmayı tercih ederim.

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

csshya ssh?
kenorb


Yanlış mıyım, yoksa ikinci -ogereksiz mi?
yckart

1
alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 11086695@172.26.19.19 -p 2222'benim için çalışmak
arganzheng

9

Tek seferde devre dışı bırakmak istiyorsanız, aşağıdakileri kullanın:

ssh -o UserKnownHostsFile=/dev/null

Bu, ana bilgisayar anahtarı değişirse ve bu, ek güvenlik için anahtarı güvenilir olarak kaydetmediğinizden de emin olur.


6

O kadarıyla gibi geliyor ,

NoHostAuthenticationForLocalhost yes

sizin için yeterince iyi olabilir . VE yine de bu güvenlik anlayışını koruyabileceksin.


2

https://askubuntu.com/a/87452/129227 yardımcı olan config dosyasını değiştirmenizi önerir. Ancak herhangi bir ev sahibi için işleri açmak yerine, bunun ev sahibi başına yapılmasını istedim. Aşağıdaki komut, sürecin otomatikleştirilmesine yardımcı olur:

örnek çağrı

./sshcheck somedomain site1 site2 site3

sshcheck betiği

#!/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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.