SSH免密码登录远端服务器

吐个糟先

前段时间开始学习Linux云服务器部署运维,在免密码登录那块卡了很久,一直没找到原因,删除实例,重新生成SSH key,折腾了几次,每次都以为这次没问题了,结果登录的时候,擦,还是要求输入密码,你说糟心不?索性先搁浅了起来,前几天又来找虐,试了两次,竟然成功登录了,小激动啊!

记录下免密码登录的整个操作流程,庆祝下,也给没踩坑的参考下。

正文

远端登入如果每次都要输入密码,还是挺麻烦的,不过,别担心,聪明的前辈们早就想到解决办法啦!用非对称加密的方式来实现免密码登录。那,具体怎么玩?

步骤:

机器A: 本地的Mac

机器B: 远端Linux服务器

Step1、在本地机器A检查是否已经生成id_rsa.pub

  • 终端运行cat ~/.ssh/id_rsa.pub

    • 如果存在该文件,终端运行:ssh-keygen -p, 将passphrase重新设置为空,直接按Enter即可,这一步很重要,不然的话,即使你设置了免密码登录,还是要每次都输入passphrase才可以登录到远端服务器。

    • 如果不存在该文件,需要先生成,终端运行:ssh-keygen -t rsa, 就会生成公钥 ~/.ssh/id_rsa.pub 以及密钥 ~/.ssh/id_rsa啦。同样的,一直按Enter,不要设置passphrase。

Step2、在机器B添上本地的公钥

  • 登录远端服务器后,新建authorized_keys

    mkdir ~/.ssh
    touch ~/.ssh/authorized_keys
    
  • 将公钥贴进远端服务器的authorized_keys中

    在A上运行:cat ~/.ssh/id_rsa.pub, 复制本机的公钥

    回到B上,运行:nano ~/.ssh/authorized_keys, 把公钥贴进去

  • 设置机器B上的文件权限

    运行:

    chmod 700 ~/.ssh
    chmod 644 ~/.ssh/authorized_keys
    

    有的参考文档要求设置成600,试了下,644,600,保证owner是可读写可执行,而其他用户和群组的最大权限是可读即可。

可以了!很简单是不是?试试看,退出重新登录下,不用敲密码啦!

The end

BTW,我之前的问题是passphrase没有设置为空,另外SSH文件复制时也出错,后面重新生成才解决的。

看了一些有关SSH免登录的操作说明,有一篇挺干货的。推荐:

Mac、Linux 上实现SSH免密码登陆到Linux服务器