在添加本机的public key到远程服务器之后,理论上如果ssh的配置文件没有问题并且网络和端口是通的,就可以无密码登陆到远程服务器,然而如果不能登陆,则可能是如下两个原因:

  • 远程服务器的$HOME/.ssh目录权限必须是700,$HOME/.ssh/authorized_keys的权限必须是600,本机的$HOME/.ssh/id_rsa或者$HOME/.ssh/id_dsa文件的权限必须是600。这个原因很容易理解,一切为了安全。这种问题修改文件和目录的权限即可解决。

     

  • 本机的$HOME/.ssh/known_hosts文件里面已经存在远程服务器的RSA指纹,但是保存这个指纹之后远程服务器的RSA指纹改变了。这时会遇到如下错误:


     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @ 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
    1f:a3:2b:b5:27:0c:5c:7b:89:27:ff:ab:cd:ba:31:66.
    Please contact your system administrator.
    Add correct host key in /root/.ssh/known_hosts to get rid of this message.
    Offending key in /root/.ssh/known_hosts:6
    RSA host key for 60.28.15.234 has changed and you have requested strict checking.
    Host key verification failed.


     

    这里我要严厉批评有的人的博客里面写到遇到这个问题,直接写解决办法是什么什么什么。原因什么的一字未提。这样的人即便会解决这个问题,对于技术的探索永远达不到令人满意的高度。这么简单的问题都不愿意探索原因,知其然而不知其所以然,连想知其所以然的精神都没有,这是中国人的悲哀!另外,这样的人的机器假如被中间人***了,他自己也毫不知情!仍然好像什么事都没有发生过一样去删除known_hosts里面对应的条目,继续连接!

      

    继续。。。。。

      

    原因可能如下:

    1. 在本机设置了到远程服务器的无密码ssh之后,远程服务器后来又重装过系统但是远程服务器重新生成key和将另外一台服务器和这台远程服务器交换IP并不会导致这个问题),导致远程服务器的RSA指纹改变了(至于RSA指纹是由什么决定的以及其记录在什么文件里面有待继续研究)。同样,为了安全,本机不让你直接连接到远程服务器,因为这有可能受到中间人的***(man-in-the-middle attack)。这种问题只要将本机的$HOME/.ssh/known_hosts里面的对应的远程服务器的那个旧的条目删除,然后重新连接就好了。

    2. 最恐怖的就是你和你的远程服务器正在被中间人***(man-in-the-middle attack)。中间人站在你和远程服务器之间,分别假装对方和你以及远程服务器沟通。只有RSA指纹能认识到你们可能正在被***,因为RSA指纹是无法伪造的。假如远程服务器的系统没有重装过,那么你要小心了。应该用网络的方法去寻找这个中间人!