sshで厳格なホストキーチェックを無効にする方法は?


223

sshUbuntu 11.04の厳密なホストキーチェックインを無効にしたいと思います。どうやるか?


10
こんにちはkarthick87、私はあなたがその変更を行うことのセキュリティの意味を理解することを望みます;)
パンサー

1
ただし、ホストキーが変更されたかどうかを知りたいことに注意してください。これは、誰かがホストをスプーフィングしている可能性があるという大きな赤い旗です。したがって、UserKnownHostFile / dev / nullは本当に悪い考えです。

4
SSHはリモート接続だけでなく使用されます。接続しているすべてのホストはテーブル上のヒープにあり、同じIPを共有しているため、常に新しいホストの警告が表示されます。
バラフアルビノ14

特定のホストのメッセージのみを削除する場合は、対応する行〜/ .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
ファイルを作成してください-ファイルの内容全体が上記の引用にあります。.sshhomedir のサブディレクトリにもあることに注意してください。
セシウム

インデントは必要ですか?エントリは、空の行で区切られたブロックのように見えます。
アンディギガ

4
これは、多くの場合、あなたは一度だけ、それを無効にしたい、多くの場合は賢明ではありません:ssh -o UserKnownHostsFile=/dev/null
odinho - Velmont

1
mkdir -p〜/ .ssh && echo "Host *">〜/ .ssh / config && echo "StrictHostKeyChecking no" >>〜/ .ssh / config
147.3k

189

~/.ssh/configすべてのHost *のファイルに追加するよりも、特定のホストを指定する方が安全です。

次のようにコマンドラインでパラメーターを渡すこともできます。

ssh -o StrictHostKeyChecking=no yourHardenedHost.com

これはホストごとに1回だけ行う必要があることに注意してください。最初にこれを言うのは次の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 14年

1
@qwertzguy動作します。あなたのオプションは、ホストキーが毎回失われるようにします。これは便利でより安全ですが、質問が要求したものではありません。
ジョンベントレー

@qwertzguyこれを答えとして追加してもらえますか、あなたのものは、quick'n'dirtyに最適です。あなたの答えを忍者盗みたくありませんでした。
odinho - Velmont

@ odinho-velmont完了
-qwertzguy

106

あなたのssh設定の設定を指摘する価値があります:

StrictHostKeyChecking no

ホストキーが.ssh / known_hostsに追加されたままになることを意味します-ホストを信頼するかどうかのプロンプトは表示されませんが、ホストが変更された場合、大きな警告が表示されます。別のパラメーターを追加することにより、この問題を回避できます。

UserKnownHostsFile /dev/null

これにより、これらの「新しく検出された」ホストがすべてゴミ箱に追加されます。ホストキーが変更されても、問題ありません。

ホストキーでこれらの警告を回避することは明らかなセキュリティ上の影響があることは言うまでもありません-あなたが正しい理由でそれをしていること、そして実際にあなたが接続しているのはあなたが接続するのでなく現時点では、sshのセキュリティの大部分をソリューションとして侵食しているため、悪意のあるホストです。

たとえば、コマンドラインでこれを試行して設定する場合、完全なコマンドは次のようになります。

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

ただし、上記のssh構成ファイルの作業例は、すべての場合でより意味がありそうなので、ばかげています。


1
あなたが正しいなら、あなたは大きな警告得るか
Freedom_Ben

1
これが正しい答えだと思います。これは、プライベートローカルネットワーク上のホストへの接続に適しています。
スティーブデイビス

4
へのエイリアスを持つと便利ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@hostです。私の場合issh、ホストキーの変更がわかっているホストに接続するために使用します。
-ecerulm

1
@ecerulm -ちょうど小さなタイプミス:それはUserKnownHostsFileありませんUserKnownHostFiles
グレイパンサー

20

ご参考までに。csshを使用するときだけ、ホストチェックを無効にすることを好みます。

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

csshまたはssh
ケノーブ14年

たぶん彼は、使用していますcssh.sourceforge.netを
MarkHu

私は間違ってい-oますか、2番目は不要ですか?
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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.