如何在ssh中禁用严格的主机密钥检查?

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

在你的~/.ssh/config (如果这个文件不存在,只需创建它):

 Host * StrictHostKeyChecking no 

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

确保文件的权限仅限制访问自己:

 sudo chmod 400 ~/.ssh/config 

而不是将其添加到所有Host *的~/.ssh/config文件中,指定特定主机会更安全。

您还可以在命令行上传递一个参数,如下所示:

 ssh -o StrictHostKeyChecking=no yourHardenedHost.com 

值得指出的是:

 StrictHostKeyChecking no 

意味着主机键仍然被添加到.ssh / known_hosts – 你不会被提示你是否信任它们,但是如果主机改变了我愿意打赌你会得到关于它的重大警告。 您可以通过添加另一个参数来解决此问题:

 UserKnownHostsFile /dev/null 

这会将所有这些“新发现的”主机添加到垃圾箱。 如果主机密钥发生变化,则不会出现问题。

我不能不提及在主机键上绕过这些警告有明显的安全后果 – 你应该小心,你是出于正确的原因这样做,你实际上连接的你要连接的意思而不是恶意主机

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

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

如果要一次性禁用,请使用:

 ssh -o UserKnownHostsFile=/dev/null 

如果主机密钥发生更改,这也将起作用,并确保不将密钥保存为可信的以增加安全性。

听起来是这样的

 NoHostAuthenticationForLocalhost yes 

对你来说可能还不错。 你仍然可以保持这种安全感。

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