问题描述:
使用ssh远程连接的时候报如下错误:
解决办法:
输入如下命令:
ssh -o StrictHostKeyChecking=noroot@123.59.xx.xx
输入密码,链接成功
其他解决方案:
vi ~/.ssh/known_hosts
删除与想要连接的主机相关的行;或者直接删除known_hosts这个文件。 当然这个方案也是可行的,但并非解决问题的根本办法,因为继续使用,今后还会出现这样的情况,还得再删除。
下面简单讲一下这个问题的原理和比较长久的解决方案。
用OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。
SSH对主机的public_key的检查等级是根据StrictHostKeyChecking变量来配置的。默认情况下,StrictHostKeyChecking=ask。简单描述下它的三种配置值:
StrictHostKeyChecking=no
#最不安全的级别,当然也没有那么多烦人的提示了,相对安全的内网测试时建议使用。如果连接server的key在本地不存在,那么就自动添加到文件中(默认是known_hosts),并且给出一个警告。
StrictHostKeyChecking=ask #默认的级别,就是出现刚才的提示了。如果连接和key不匹配,给出提示,并拒绝登录。StrictHostKeyChecking=yes #最安全的级别,如果连接与key不匹配,就拒绝连接,不会提示详细信息。
对于测试环境来说,为了方便,选择最低的安全级别。在.ssh/config(或者/etc/ssh/ssh_config)中修改配置文件,配置如下:
最后面添加:修改/etc/ssh/ssh_config文件的配置,以后则不会再出现此问题
StrictHostKeyChecking noUserKnownHostsFile /dev/null
建立SSH的信任关系
以实现 node1 免密码给 node2 scp传输文件为例说明,需要如下几个步骤:
1、生成 node1 的秘钥(私钥和公钥)
1)进入 node1 的/root/.ssh目录
cd /root/.ssh/
2)执行如下命令,生成公钥和私钥(此时,一路回车即可)
ssh-keygen -t rsa
其中,id_rsa是私钥,id_rsa.pub是公钥。
2、将 node1 的 id_rsa.pub中的内容追加到 node2 的authorized_keys 认证文件中
1)将 node1 的公钥(id_rsa.pub)信息,输出到临时认证文件authorized_keys_node1 中
cat id_rsa.pub >authorized_keys_node1
2)将authorized_keys_node1 文件 scp 到/root/.ssh/ 目录下
scp authorized_keys_node1 root@node2:/root/.ssh/
3)登录到node2节点,进入 /root/.ssh目录
cd /root/.ssh/
4)将 node1 的公钥信息,追加到 node2 的认证文件(authorized_keys)中
cat authorized_keys_node1 >>authorized_keys
至此,node1 到 node2 的信任关系建立好了,node1 scp文件到 node2,就不在需要输入密码验证了。