KNOWN_HOSTS处理

在平时工作中,有时候需要SSH登陆到别的linux主机上去,但有时候SSH登陆会被禁止,并弹出如下类似提示:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 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 is36:68:a6:e6:43:34:6b:82:d7:f4:df:1f:c2:e7:37:cc.Please contact your system administrator.Add correct host key in /u/xlian008/.ssh/known_hosts to get rid of this message.Offending key in /u/xlian008/.ssh/known_hosts:2RSA host key for 135.1.35.130 has changed and you have requested strict checking.Host key verification failed.

比较奇怪,于是研究了一下。 ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。我在上面列出的情况,就是这种情况。

原因:一台主机上有多个Linux系统,会经常切换,那么这些系统使用同一ip,登录过一次后就会把ssh信息记录在本地的~/.ssh/known_hsots文件中,切换该系统后再用ssh访问这台主机就会出现冲突警告,需要手动删除修改known_hsots里面的内容。

有以下两个解决方案:
1. 手动删除修改known_hsots里面的内容; (清除旧的公钥信息ssh-keygen -R 192.168.0.10)
2. 修改配置文件“~/.ssh/config”,加上这两行,重启服务器。
StrictHostKeyChecking no
UserKnownHostsFile /dev/null

优缺点:
1. 需要每次手动删除文件内容,一些自动化脚本的无法运行(在SSH登陆时失败),但是安全性高;
2. SSH登陆时会忽略known_hsots的访问,但是安全性低;

其它:
1. rm -rf ~/.ssh/known_hosts
优点:干净利索 缺点:把其他正确的公钥信息也删除,下次链接要全部重新经过认证
2. vi ~/.ssh/known_hosts 删除对应ip的相关rsa信息(本例可知删除53行信息即可)
优点:其他正确的公钥信息保留缺点:还要vi,还要找到对应信息,稍微优点繁琐

linux下经常遇到known_hosts问题,例如git clone一个ssh协议的远程库,就会交互询问是否接受远程服务器的fingerprint,当执行一些自动化脚本时就得通过expect来处理这种情况。

今天搜索了一下,整理了相关处理办法。

linux需要接受和校验fingerprint的原因是避免受到DNS Hijack之类的攻击。具体原理是第一次访问远程服务器时从远程服务器接受一个fingerprint,实际上是一个rsa或者dsa公钥,将这个公钥保存在~/.ssh/known_hosts里,下次访问该服务器时就会通过这个公钥校验,如果校验不通过就会发出警告。

如果要让ssh不去校验fingerprint有两种办法,一个是ssh时加上-o StrictHostKeyChecking=no参数,这只会影响本次操作:

  1. ssh -o StrictHostKeyChecking=no username@hostname.com
    另外永久解决方案是在/etc/ssh/ssh_config或者~/.ssh/config里配置StrictHostKeyChecking no,修改哪个文件取决于你想影响全局还是当前用户。

另外一种方案是预先将远程服务器的fingerprint存入known_hosts,这样就不会出现询问的情况。

ssh-keygen -R [hostname]

ssh-keygen -R [ip_address]

ssh-keygen -R [hostname],[ip_address]

ssh-keyscan -t rsa [hostname],[ip_address] >> ~/.ssh/known_hosts

ssh-keyscan -t rsa [ip_address] >> ~/.ssh/known_hosts

ssh-keyscan -t rsa [hostname] >> ~/.ssh/known_hosts
ssh-keygen是将已存在的服务器公钥清除,避免重复添加。

ssh-keyscan则是获取远程服务器的fingerprint,如果还想获取dsa公钥则将rsa改成rsa,dsa

参考:

http://serverfault.com/questions/132970/can-i-automatically-add-a-new-host-to-known-hosts

http://blog.csdn.net/yasaken/article/details/7348441

时间: 2024-08-22 15:16:47

KNOWN_HOSTS处理的相关文章

CentOS下Git的服务器版安装和使用

Git分布式版本控制系统: Git的使用体验,早已习惯了svn [集中式] 代码管理的吾,第一次接触分布式的git的时候,感觉很难使用,煎熬了一段时间,整个项目组,也是花费了很大的代价,就是出现代码被覆盖很多次,代码都不敢提交了! 记得在中国民航的时候,由于服务器硬件搬家过程中损坏,导致整个系统和代码全部丢失,不是很重要所以没有去做数据恢复,svn就挂了. 记得在金葵花的时候,由于svn服务器端口被抢占,导致没有启动,早上经理不在,没权限,所有,大家闲置了一早上. 使用了一段时间的git,使用过

z/OS OpenSSH简介

正如你所知道的,OpenSSH 可以提供更加安全.可靠的login,remote execution 以及文件传输.z/OS OpenSSH 作为 Secure Shell 在z/OS 上的实现能够提供更具特性和性能优良的数据传输.之所以说z/OS OpenSSH 更具特性,是因为z/OS OpenSSH 在实现了开源Secure Shell在UNIX平台上所具有的大部分功能的同时,充分利用了z/OS 的支持.例如,OpenSSH keys 可以存储在 RACF 中,将数据传输产生的信息记录在S

Corosync+Pacemaker+DRBD实现LAMP双机热备

操作思考:通过DRBD实现数据同步,通过Corosync+Pacemaker(下图简称CP)实现检测故障并转移,常规状态下仅其中一台工作,另一台仅检测和同步数据,当有故障时,Server2自动接管一切业务,并向另一台同步数据(当然,此时不一定能同步成功..).图示如下: 操作环境: rhel5.8 (光盘yum源) 192.168.88.20     demo1.mos.com   demo1 192.168.88.21     demo1.mos.com   demo2 内核:2.6.18-3

教你使用scp在Linux主机之间进行定时备份

在两台Linux主机,而且都是ssh权限,那就建议使用scp命令备份了,这种备份速度快且是加密传输,安全性高.但是大数据的文件,不建议使用这中方法去备份! 好的,实验很简单: 1 ssh传输需要密钥的 我们需要创造密钥用来验证! ssh服务器端: [root@text ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rs

非交互方式远程登录linux主机并更换IP地址

问题分析: 根据开发组同事反应,通过VCenter对RHEL6.0以下版本的系统进行克隆的时候,无法使用高级选项进行IP的指定操作,从而通过CloudStack对新的实例指定IP也是不能实现的,而且,不能够使用DHCP服务器解决该问题,否则会导致新虚拟机IP地址跟指定IP的不一致,也可能导致整个系统中IP地址分配的混乱. 解决思路: 给RHEL6.0以下系统制作的模板均指定一个固定的保留IP地址,比如192.168.3.0/24网段中,保留192.168.3.240~192.168.3.250给

linux下SSH远程连接服务慢解决方案

1.适用命令及方案如下: [远程连接及执行命令] ssh -p22 root@10.0.0.19 ssh -p22 root@10.0.0.19 /sbin/ifconfig [远程拷贝:推送及拉取] scp -P22 -r -p /etc root@10.0.0.19:/tmp/ scp -P22 -r -p root@10.0.0.19:/tmp/ /etc [安全的FTP功能] sftp -oPort=22 root@10.0.0.19 [无密码验证方案] 例如利用sshkey批量分发文件

ssh 密钥认证及ssh scp无需输入密码的实现

经常在Linux间用scp命令传输文件,每次度需要输入对方机器的密码,非常麻烦.这种方式可以实现让双方自动通过密钥认证,无需手动输入密码: 1,Root登陆,在两边机器执行以下命令并一路回车,生成RSA私钥和公钥: [root@ ~]# cd .ssh [root@ .ssh]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_

Linux远程登录和无密码登录方法

  一.远程登录方法 SSH 是一种安全通道协议 , 主要用来远程登录.在 RHEL 5 系统中使用的是 OpenSSH 服务器由 openssh , openssh-server 等软件包提供的 ( 默认已经安装 ) ,并以将 sshd 添加为标准的系统服务. 使用方法如下: 代码如下: $ ssh host $ ssh username@host $ ssh -p 222 username@host -p: 指定访问端口 ; 如果省略该参数 , 则默认访问 SSH 服务的默认端口 22; 如

Linux安全攻略之SSH服务连接时的常见问题与解答

  什么是SSH呢? SSH的英文全称是Secure SHell.通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗.还有一个额 外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度.SSH有很多功能,它既可以代替telnet,又可以为ftp.pop.甚至ppp提供一 个安全的"通道".SSH客户端与服务器端通讯时,用户名及口令均进行了加密,有效防止了对口令的窃听.最初SSH是由芬兰的一家公