[转]ssh不输入密码登录(使用公钥、私钥验证)

转载自:http://www.52zhe.cn/read.php/168.htm

场景:我们通常管理服务器,以一个工作站通过ssh,来管理所有的服务器主机。这样对于安控来讲比较容易控制。而在这个工作站,我们用ssh-keygen来生成所需要的公钥和私钥。并将公钥(客户端:id_*.pub)内容追加到服务器上的认证文件(服务器端:authorized_keys)里面。

注意事项:id_*.pub、authorized_keys所在的位置。千万不要弄混了这个逻辑问题。如果想不明白。就仔细想想。不过当时我真的是想不明白,照理上,一台服务器,其控制权限,不应该由服务器来产生并且分发吗?后来又想,如果你要是管100台服务的话,你是不是要在100台服务器上来创建这些密钥对?是不是很麻烦?

工作站(client): ~/.ssh/id_*.pub
服务器(server): ~/.ssh/authorized_keys

疑难解答:为什么我创建了密钥对,却还是需要密码?root用户可以,普通用户就是不行?真TMD的奇怪。

1: 像上面说的,你一定是弄反了。
2: 权限问题。看看你的umask值。root的umask是0022,普通用户的掩码是0002.这样意味着什么,意味着root用户和普通创建的默认文件的权限与普通用户的权限不一样。root用户默认去掉了组用户的W权限。而普通用户是赋予组内用户的W权限。废话说了一堆。看下面。

解决方法:
不管怎样保证你的server端目录~/.ssh(0700)和~/.ssh/authorized_keys(0600)只有属主拥有读写权限。这样肯定可以通过,至于client端你设置成777都没有关系,不受影响。这点想起我就想笑,插点题外话,曾经有一个兄弟去维护主机,可能是做RAC类似的东西吧。反正那边的人自作主张的认为,权限给到777,总应该没有问题吧。结果恰恰导致无法访
问。

后记:
补充权限错误的日志分析。(服务器Server端)

[root@minot ~]# tail -f /var/log/secure
......................
Mar 28 09:41:14 minot sshd[3152]: Authentication refused: bad ownership or modes for file /root/.ssh/authorized_keys
......................

更新:

可以通过ssh-copy-id,将本地公钥分发到远程目标登录的机器,例如:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.2

 

Leave a Reply

Your email address will not be published. Required fields are marked *