使用ssh公钥实现ssh免密码登录

原理:
密匙认证需要依靠密匙,首先创建一对密匙(包括公匙和密匙,并且用公匙加密的数据只能用密匙解密),并把公匙放到需要远程服务器上。这样当登录远程服务器时,客户端软件就会向服务器发出请求,请求用你的密匙进行认证。服务器收到请求之后,先在你在该服务器的宿主目录下寻找你的公匙,然后检查该公匙是否是合法,如果合法就用公匙加密一随机数(即所谓的challenge)并发送给客户端软件。客户端软件收到 “challenge”之后就用私匙解密再把它发送给服务器。因为用公匙加密的数据只能用密匙解密,服务器经过比较就可以知道该客户连接的合法性。
###########################
A客户机:192.168.10.217
B远端主机:192.168.10.223
A为本地主机(即用于控制其他主机的机器)
B为远程主机(即被控制的机器Server)
A和B的系统都是Linux
在A上运行命令:

# ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码)
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
30:f6:d7:2a:ac:56:eb:3f:fa:40:25:8d:90:96:68:cb root@localhost.localdomain

------------------------------------------------
说明:
该命令将在用户的主目录/.ssh目录下面产生一对密钥
一般采用的ssh的rsa密钥:
id_rsa 私钥
id_rsa.pub 公钥

[root@localhost .ssh]# scp /root/.ssh/id_rsa.pub root@192.168.10.223:/root/.ssh/authorized_keys
The authenticity of host '192.168.10.223 (192.168.10.223)' can't be established.
RSA key fingerprint is 4b:a5:74:fb:2e:08:60:af:fa:76:d4:b0:26:4c:13:75.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.223' (RSA) to the list of known hosts.
root@192.168.10.223's password:
id_rsa.pub 100% 236 0.2KB/s 00:00

-------------------------------------------------------------
说明:
将公钥拷贝到远端主机,并写入授权列表文件
你也可以把公钥文件拷贝过去后,在远端主机下直接执行

touch /root/.ssh/authorized_keys
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

-------------------------------------------------------------
操作完毕,登陆检查。

[root@localhost .ssh]# ssh 192.168.10.223
root@192.168.10.223's password:

请注意此时如果仍提示输入密码,请检查如下文件夹和文件的操作权限,这是非常重要的, 否则ssh公钥认证体制不能正常工作:
192.168.10.217(客户端)

/home/root文件夹的权限是600
/home/root/.ssh文件夹的权限是600 (好像这个权限关系不是很大)
/home/root/.ssh/id_dsa私钥的权限600

192.168.10.223(远端主机)

/home/root文件夹的权限是644
/home/root/.ssh文件夹的权限是644 (好像这个权限关系不是很大)
/root/.ssh/authorized_keys公钥的权限644

也就是说,要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效。其实仔细想想,这样做是为了不会出现系统漏洞。
--------------------------------------------------------------

[root@localhost ~]# ssh 192.168.10.223
Last login: Sat May 12 23:09:58 2012 from 192.168.10.217
[root@localhost ~]#

无密码SSH登陆成功!
[整理自:http://hi.baidu.com/yangjinbo47/item/3de399d6f932f92d38f6f73c]

此条目发表在lnmp分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据