सवाल Ssh में सख्त होस्ट कुंजी जांच को अक्षम कैसे करें?


मैं सख्त मेजबान कुंजी जांच को अक्षम करना चाहता हूं ssh उबंटू 11.04 के लिए। यह कैसे करना है?


164
2017-12-13 14:58


मूल


हाय karthick87, मुझे आशा है कि आप उस परिवर्तन को करने के सुरक्षा के प्रभाव को समझते हैं;) - Panther
हालांकि, यह ध्यान दिया जाना चाहिए कि आप चाहते हैं यह जानने के लिए कि एक मेजबान कुंजी है या नहीं बदला हुआ। यह एक बड़ा लाल झंडा है कि कोई मेजबान को धोखा दे सकता है। तो UserKnownHostFile / dev / null एक बहुत बुरा विचार है।
एसएसएच न केवल रिमोट कनेक्शन के लिए प्रयोग किया जाता है, आपको पता है। मेरे द्वारा कनेक्ट किए जा रहे सभी होस्ट मेरी मेज पर ढेर में हैं और एक ही आईपी साझा करते हैं, इसलिए मेरे पास हमेशा नई होस्ट चेतावनी होती है। - Barafu Albino
यदि आप किसी विशेष होस्ट के लिए संदेश को हटाना चाहते हैं, तो इसी पंक्ति ~ / .ssh / known_hosts को हटाएं। - stackexchanger
यदि आपको त्रुटियों के बिना एक बार कनेक्ट करने की आवश्यकता है: ssh -o UserKnownHostsFile=/dev/null - odinho - Velmont


जवाब:


आपके में ~/.ssh/config (यदि यह फ़ाइल मौजूद नहीं है, तो बस इसे बनाएं):

Host *
    StrictHostKeyChecking no

यह आपके द्वारा कनेक्ट किए जाने वाले सभी होस्टों के लिए इसे बंद कर देगा। आप बदल सकते हैं * होस्टनाम पैटर्न के साथ यदि आप केवल कुछ होस्टों पर इसे लागू करना चाहते हैं।

सुनिश्चित करें कि फ़ाइल पर अनुमतियां केवल आपके लिए पहुंच प्रतिबंधित करें:

sudo chmod 400 ~/.ssh/config

182
2017-12-13 15:16



नाम की कोई फ़ाइल नहीं है config मेरे घर निर्देशिका में। - karthick87
एक बनाएं - फ़ाइल की पूरी सामग्री उपरोक्त मेरे उद्धरण में हैं। ध्यान दें कि इसमें है .ssh आपके homedir की उपनिर्देशिका भी। - Caesium
इंडेंटेशन आवश्यक है? मेरी प्रविष्टियां रिक्त रेखा से विभाजित ब्लॉक की तरह दिखती हैं। - Andi Giga
यह कई मामलों में मूर्खतापूर्ण है, अक्सर आप इसे एक बार अक्षम करना चाहते हैं: ssh -o UserKnownHostsFile=/dev/null - odinho - Velmont
mkdir -p ~ / .ssh && echo "होस्ट *"> ~ / .ssh / config && echo "StrictHostKey चेकिंग नहीं" >> ~ / .ssh / config - Sankarganesh Eswaran


इसे जोड़ने के बजाय ~/.ssh/config सभी होस्ट * के लिए फ़ाइल, एक विशेष होस्ट निर्दिष्ट करना सुरक्षित होगा।

आप कमांड लाइन पर पैरामीटर भी पास कर सकते हैं:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com

141
2017-07-25 01:27



ध्यान दें कि आपको आम तौर पर प्रति होस्ट एक बार ऐसा करने की आवश्यकता होती है क्योंकि यह पहली बार कहती है: Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts. - MarkHu
वह काम नहीं करेगा। यह होना चाहिए ssh -o UserKnownHostsFile=/dev/null बजाय। - qwertzguy
@qwertzguy यह काम करता है। आपका विकल्प यह बना देगा ताकि मेजबान कुंजी हर बार खो जाए, जो उपयोगी और अधिक सुरक्षित है, लेकिन सवाल के लिए क्या नहीं पूछा गया। - Jon Bentley
@qwertzguy क्या आप इसे एक उत्तर के रूप में जोड़ सकते हैं, आपका वास्तव में जल्दी से सबसे अच्छा है "बस कनेक्ट करें मुझे पता है कि मैं क्या कर रहा हूं"? निंजा नहीं चाहते थे-आपका जवाब चुरा लें। - odinho - Velmont
@ odinho-velmont किया - qwertzguy


यह इंगित करने लायक है कि:

StrictHostKeyChecking no

इसका मतलब होगा कि मेजबान अभी भी .ssh / known_hosts में जोड़े गए हैं - आपको बस उन पर भरोसा नहीं किया जाएगा कि आप उन पर भरोसा करते हैं, लेकिन मेजबान परिवर्तन करना चाहिए, मैं शर्त लगाने के इच्छुक हूं कि आपको इसके बारे में बड़ी चेतावनी मिल जाएगी। आप एक और पैरामीटर जोड़कर इस समस्या के आसपास काम कर सकते हैं:

UserKnownHostsFile /dev/null

यह इन सभी "नए खोजे गए" होस्ट ट्रैश बिन में जोड़ देगा। यदि कोई मेजबान कुंजी बदलती है, तो कोई परेशानी नहीं होती है।

मैं इस बात का उल्लेख नहीं करूँगा कि मेजबानों पर इन चेतावनियों को रोकने के लिए स्पष्ट सुरक्षा विधियां हैं - आपको सावधान रहना चाहिए कि आप इसे सही कारणों से कर रहे हैं और जो वास्तव में आप कनेक्ट कर रहे हैं है एक दुर्भावनापूर्ण मेजबान से कनेक्ट करने के लिए आपका क्या मतलब है।


81
2017-12-02 23:25



आप सही हैं, आपको बड़ी चेतावनी मिलती है - Freedom_Ben
मुझे लगता है कि यह सही जवाब है। यह एक निजी स्थानीय नेटवर्क पर मेजबान से जुड़ने के लिए अच्छी तरह से काम करता है। - Steve Davis
उपनाम रखने के लिए सुविधाजनक हो सकता है ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host। मेरे मामले में मैं उपयोग करता हूं issh मेजबान से कनेक्ट करने के लिए जहां मुझे मेजबान कुंजी परिवर्तन पता है। - ecerulm
@ecerulm - बस एक छोटा टाइपो: यह है UserKnownHostsFile नहीं UserKnownHostFiles। - Grey Panther


FYI करें। मैं cssh का उपयोग करते समय होस्ट जांच को अक्षम करना पसंद करता हूं।

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

15
2017-07-18 18:01



cssh या ssh? - kenorb
शायद वह उपयोग करता है cssh.sourceforge.net - MarkHu
क्या मैं गलत हूं, या दूसरा है -o अनावश्यक? - yckart
alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 11086695@172.26.19.19 -p 2222' मेरे लिए काम - arganzheng


यदि आप एक बार आधार पर अक्षम करना चाहते हैं:

ssh -o UserKnownHostsFile=/dev/null

यह तब भी काम करेगा यदि मेजबान कुंजी बदलती है और यह सुनिश्चित करेगी कि कुंजी को अतिरिक्त सुरक्षा के लिए विश्वसनीय के रूप में सहेजना न पड़े।


6
2017-08-29 15:55





यह क्या से लगता है,

NoHostAuthenticationForLocalhost yes

शायद आपके लिए काफी अच्छा है। और आप अभी भी सुरक्षा के समानता को बनाए रखने में सक्षम होंगे।


4
2017-07-23 20:20





https://askubuntu.com/a/87452/129227 कॉन्फ़िगरेशन फ़ाइल को संशोधित करने का सुझाव देता है जो मदद करता है। लेकिन किसी भी मेजबान के लिए चीजों को खोलने की बजाय मैं चाहता था कि यह प्रति मेजबान किया जाए। नीचे दी गई स्क्रिप्ट प्रक्रिया को स्वचालित करने में मदद करती है:

उदाहरण कॉल

./sshcheck somedomain साइट 1 साइट 2 साइट 3

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