Linux生成密钥和ssh免密码登录

发布日期:2017-05-19    浏览量:1292

必要配置

首先,在你的电脑和服务器上的home目录下需要有.ssh这个隐藏文件夹,这个文件夹是用来存放公钥和私钥的。

tips: 在你的home目录使用ls -al命令查看

如果有.ssh文件夹,那么可以使用这个命令查看有没有公钥(假设你在home目录下):cat .ssh/id_rsa.pub, cat .ssh/id_rsa,如果运行这个命令后能看到密钥,那么就可以进行下一步了。

如果没有.ssh文件夹,或运行上述命令后没有看到密钥,那么我们就来生成密钥:ssh-keygen -t rsa

一路回车,保持默认选项,这时会在home目录下生成一个隐藏目录.ssh,里面有id_rsa(私钥)和id_rsa.pub(公钥)这两个文件。

文件说明

.ssh文件夹中一般会有这几个文件:

  • id_rsa(私钥文件)
  • id_rsa.pub(公钥文件)
  • known_hosts(用于保存你登录过的服务器)
  • authorized_keys(用于保存其它服务器生成的公钥)

原理

我们要进行ssh免密码登录,理论上是只要在你要进行登录的目标服务器上的authorized_keys文件中保存你电脑上生成的公钥即可。

好,根据这个原理,我们接下来就可以进行配置了:
目的:把本机的公钥加到服务器上的authorized_keys文件中
操作方法多种多样,这里推荐一个shell命令,方便操作,提升逼格:

  1. // 请自行替换端口和ip
  2. $ cat .ssh/id_rsa.pub >> authorized_keys | scp -P端口默认22 authorized_keys root@你的服务器IP或域名:~/.ssh/

输入密码后就完成了把你机子上的公钥传输到目标服务器上的~/.ssh/目录下的操作。
这时候如果没有特殊情况就可以免密码登录了。


还是不能登录?请看以下说明

如果按照上述配置完成后,还是出现了不能免密码登录的情况,除去系统sshd配置的原因,那就是你要登录的用户名与该用户下home目录的用户和用户组出现了不一致的情况,比如说这样:

ssh root@foo.com ,你用root用户登录,但是服务器上root下home目录的所属用户和用户组为lisi,这样免密码登录就不好使了,因为权限不够。

(我的服务器出现上述问题的原因是我在daocloud配置了我的服务器以便于部署docker,于是这货就大大方方的把我的home目录的user和user group给改了,于是我就不能免密码登录了,修改回root就好了。)

解决方法是修改目标服务器上用户home目录的所属用户和用户组,示例:
shown root:root home
修改完成后就可以了


附上我查找问题的方法:
ssh -p22 -v root@abc.com
ssh登录的时候加上-v选项,这时就会把登录的过程列出来,通过查看这些日志就可以发现是哪个地方导致的该问题。