我想在ssh中为Ubuntu 11.04禁用严格的主机密钥检查。怎么做?

评论

karthick87,您好,我希望您了解进行此更改的安全性;)

但是应注意,您想知道主机密钥是否已更改。这是一个很大的危险信号,表明有人可能在欺骗主机。因此UserKnownHostFile / dev / null是一个非常糟糕的主意。

您知道,SSH不仅用于远程连接。我要连接的所有主机都在我的桌子上的堆中,并且共享相同的IP,所以我总是收到新的主机警告。

如果只想删除特定主机的消息,请删除相应的〜/ .ssh / known_hosts行。

如果您只需要进行一次连接而没有错误:ssh -o UserKnownHostsFile = / dev / null

#1 楼

在您的~/.ssh/config中(如果此文件不存在,只需创建它):

Host *
    StrictHostKeyChecking no


这将关闭所有您连接的主机的文件。如果只希望将*应用于某些主机,则可以将其替换为主机名模式。

评论


我的主目录中没有名为config的文件。

–karthick87
2011-12-14 14:40

做一个-文件的全部内容在上面的引用中。请注意,它也位于homedir的.ssh子目录中。

–铯
2011-12-14 14:44

是否需要缩进?我的输入看起来像用空行分隔的块。

–安迪·吉加(Andi Giga)
17年6月20日在10:04

在许多情况下,这是不明智的,通常您只想禁用一次:ssh -o UserKnownHostsFile = / dev / null

–odinho-费尔蒙特
17年8月29日在9:34

mkdir -p〜/ .ssh && echo“ Host *”>〜/ .ssh / config && echo“ StrictHostKeyChecking no” >>〜/ .ssh / config

– Sankarganesh Eswaran
18-4-25在12:24



#2 楼

与其将它添加到所有Host *的~/.ssh/config文件中,不如指定一个特定的主机。

您也可以在命令行上像这样传递参数:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com


评论


请注意,您通常只需要对每个主机执行一次操作,因为它是第一次这样说:警告:将“ frxxx.blaps.net,10.11.12.13”(RSA)永久添加到已知主机列表中。

– MarkHu
13年7月24日在0:49

那行不通。它应该是ssh -o UserKnownHostsFile = / dev / null。

– qwertzguy
14-10-29在2:51

@qwertzguy确实有效。您的选择将使主机密钥每次都丢失,这是有用且更安全的,但不是问题所要求的。

–乔恩·本特利
15年11月30日,0:04

@qwertzguy您能补充一下这个问题吗,您的回答确实真的最好,因为“只要连接我就知道我在做什么”即可?不想忍者偷走你的答案。

–odinho-费尔蒙特
17年8月29日在9:32

ssh -o UserKnownHostsFile = / dev / null -o StrictHostKeyChecking = no对我都有用

– netawater
17年11月12日下午5:35

#3 楼

值得指出的是,在您的ssh配置中进行设置:相信他们,但是如果主人改变,我敢打赌,您会收到关于它的重大警告。您可以通过添加另一个参数来解决此问题:如果主机密钥发生了更改,那么就没什么麻烦了。您实际上要连接的是连接的意思,而不是恶意主机,因为这时您已经侵蚀了ssh安全性的主要部分作为解决方案。例如,如果您尝试在命令行中进行设置,则完整的命令应为:在所有情况下,配置文件都可能更有意义。

评论


你是正确的,你得到了重大警告

– Freedom_Ben
2014年1月20日17:35



我认为这是正确的答案。这非常适合连接到专用本地网络上的主机。

–史蒂夫·戴维斯(Steve Davis)
2015年1月14日14:39

为ssh使用别名可以很方便-o StrictHostKeyChecking = no -o UserKnownHostFiles = / dev / null user @ host。就我而言,我使用issh连接到我知道主机密钥已更改的主机。

–RubenLaguna
16年5月2日在13:53

@ecerulm-只是一个小错字:它是UserKnownHostsFile而不是UserKnownHostFiles。

–灰色豹
17-10-2在10:16

像宝石一样,最终有人会理解完成和结论中的慷慨

– sg28
20年5月16日,0:04

#4 楼

仅供参考。我更喜欢仅在使用csh时禁用主机检查。

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


评论


cssh还是ssh?

– Kenorb
2014年1月16日14:29

也许他使用cssh.sourceforge.net

– MarkHu
2014年1月31日,下午3:22

我是错了,还是第二个-o是不必要的?

– yckart
16-11-22在2:15



别名relay ='ssh -o StrictHostKeyChecking =否-o UserKnownHostsFile = / dev / null 11086695@172.26.19.19 -p 2222'为我工作

– arganzheng
18年7月25日在8:12

#5 楼

如果您想一次性禁用,请使用:

ssh -o UserKnownHostsFile=/dev/null


如果主机密钥发生更改,这也将起作用,并且将确保不将密钥保存为受信任增强了安全性。

#6 楼

从表面上看,

NoHostAuthenticationForLocalhost yes


对您来说可能足够好。而且您仍然可以维持这种安全感。

#7 楼

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='3[0;34m'  
red='3[0;31m'  
green='3[0;32m' # '\e[1;32m' is too bright for white bg.
endColor='3[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=""
  local l_msg=""
  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=""
  # use ansi red for error
  color_msg $red "Error: $l_msg" 1>&2
  exit 1
}

#
# show the usage
#
usage() {
  echo "usage: q4312079q domain sites"
  exit 1 
}

#
# check the given server
#
checkserver() {
  local l_server=""
  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 q4312079q"  >> $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= 
    shift 
    color_msg $blue "checking ssh configuration for domain $domain sites $*"
    checkconfig
    checkservers $* 
    ;;
esac
 


评论


grep $ l_server $ sconfig> / dev / null;如果[$? -eq 1];那么应该用if代替! grep -q“ $ l_server”“ $ sconfig”;然后。 1)除非需要,否则不要检查退出代码,而直接使用。 2)grep有-q选项。使用它代替> / dev / null。 3)所有环境变量扩展都应加双引号。另外,请考虑避免缩写,并考虑将诸如checkserver之类的复合词命名为check_server或checkServer,以便使用拼写检查的IDE不会抱怨。

– ErikE
20年7月13日在9:58

@ErikE-请发布您的改进版本-我会很乐意对其进行投票。

– Wolfgang Fahl
20年7月13日在12:20

没关系,我的评论在这里,任何想要它的人都会找到它。

– ErikE
20年7月15日在18:30