ssh
中为Ubuntu 11.04禁用严格的主机密钥检查。怎么做?#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
评论
karthick87,您好,我希望您了解进行此更改的安全性;)但是应注意,您想知道主机密钥是否已更改。这是一个很大的危险信号,表明有人可能在欺骗主机。因此UserKnownHostFile / dev / null是一个非常糟糕的主意。
您知道,SSH不仅用于远程连接。我要连接的所有主机都在我的桌子上的堆中,并且共享相同的IP,所以我总是收到新的主机警告。
如果只想删除特定主机的消息,请删除相应的〜/ .ssh / known_hosts行。
如果您只需要进行一次连接而没有错误:ssh -o UserKnownHostsFile = / dev / null