sftp -o "StrictHostKeyChecking no" www@100.52.2.134
sftp -o "StrictHostKeyChecking no" www@100.52.2.134 22
加上 -o "StrictHostKeyChecking no" 就不需要输入什么 yes 或 no 了
1、原理简介
ssh是一种网络协议,用于计算机的加密登陆,以及一些远程命令执行。
在linux常用指令中,ssh, scp都使用了ssh协议。
ssh协议是采用Rsa加密算法来实现的。
rsa加密算法是一处非对称加密算法,就是指该算法加密和解密使用不同的密钥,即使用加密密钥进行加密、解密密钥进行解密。 在RAS算法中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。
下面使用ssh协议实现登陆的流程来对协议进行说明:
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
那么为什么需要fingerprint呢?
这是由于ssh协议的实现机制决定的,ssh协议无法确认远程主机是不要告,出于安全的的考虑增加了fingerprint手动确认,让用户来自动确认主机的可靠怀。
如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪,而攻击者则可以通过用户请求获得远程主机的密码,登陆远程主机。这就是著名的中间人攻击。
2、ssh/scp 跳过首次连接远程主机的fingerprint
当首次ssh或者scp时,会收到系统的如下提示。
The authenticity of host '119.8.35.122 (119.8.35.122)' can't be established. ECDSA key fingerprint is SHA256:vAPUXtKvN3KmiGvq8XEtYUlBI47eiX6fvKp4EPwUm70. Are you sure you want to continue connecting (yes/no/[fingerprint])?
以上确认提示大意为:无法确认19.8.35.122主机的真实可靠性,它的rsa key的指纹是xxx,你是否希望继续连接到该机器?
一旦选择是,则机器19.8.35.122的rsa key就会保存到.ssh/known_hosts中,下次连接时,有了记录,就不会再有相应提示。
当管理的机器非常多时,每一台都需要手动确认是一件非常麻烦的事情,我们要以通过后面的方便来跳过确认。我们可以采用发下两种方式来路过fingerprint确认。出于安全考虑,本机制只建议在内网使用。
方式一:在命令行中添加 -o "StrictHostKeyChecking no"
执行ssh或scp命令时,系统就会自动把远程主机的rsa key加入到.ssh/known_hosts文件中。
ssh -o "StrictHostKeyChecking no" root@host
StrictHostKeyChecking no|ask|yes:
StrictHostKeyChecking代码了远程主机的host key确认方式。有如下几种设置。
no代表不做任何确认,直接通过验证,把rsa加入到.ssh/known_hosts。
ask为默认值,需要用户手动确认是否通过验证,是否把远程主机加入到.ssh/known_hosts中。
yes为最高安全级别,如果本地没有相应的rsa key则会直接拒绝连接,并出给提示。
方式二:修改.ssh/config(或者/etc/ssh/ssh_config)配置后
配置文件修改后,将应用于所有ssh命令,不需要在单命令上指定StrictHostKeyChecking:
在.ssh/config(或者/etc/ssh/ssh_config)中增加如下配置:
StrictHostKeyChecking no
3、处理远程主机rsa key变动的情况
当远程主机的rsa key与本地对不上,则会收到报错。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 50:e6:cb:58:bc:b7:a3:f6:e8:8f:46:a7:c1:5f:c2:df. Please contact your system administrator. Add correct host key in /home/cobyeah/.ssh/known_hosts to get rid of this message. Offending key in /home/cobyeah/.ssh/known_hosts:7 RSA host key for 192.168.0.4 has changed and you have requested strict checking. Host key verification failed.
我们有以下两个方法可以解决。