本文以SecureCRT 为例给出公钥登陆的过程及原理。
过程(引用自:http://hi.baidu.com/innerpeace365/item/ae821bc1fa70f064a9ba94d0)
1、SecureCRT设置
==========================================
Quick Connect-> Authentiation -> Public Key -> Properties ->Create Identity File ->DSA/RSA -> Set Passphrase -> Done
==========================================
完成时会在指定目录生成两个文件,默认名称为:私钥Identity和公钥Identity.pub。
2、SSH服务器设置如果不存在/root/.ssh目录,则自行建立。
==========================================
# mkdir /root/.ssh# chmod 700 /root/.ssh
==========================================
将公钥Identity.pub传到Linux服务器,将SSH2兼容格式的公钥转换成为Openssh兼容格式。
==========================================
# ssh-keygen -i -f Identity.pub >> /root/.ssh/authorized_keys# chmod 600 /root/.ssh/authorized_keys
==========================================
3、使用SecureCRT登录服务器首先设置登录模式为PublicKey,并选择刚刚创建的公钥文件Identity.pub。
4、重启Linux服务器的ssh服务
==========================================
# service sshd restart
==========================================
其实这个步骤还缺乏一些配置的必要步骤:编辑:/etc/ssh/sshd_config 文件,
去掉一下三行前面的注视:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
然后
修改 PasswordAuthentication yes 。
最后再重启 ssh 服务即可。
原理
公钥私钥加密实质上是利用了不对称加密的算法的特性。公钥用来加密,私钥用来解密。A使用B的公钥来加密要发送的物件,再将它发送
出去,而B可以使用自己的私钥来解密,没有这个密钥是不可能解密的。这个简单的模型就是不对称加密的模型。只不过使用公钥的SSH登陆
过程比这个要复杂一些,因为它里面包括了生成会话密钥。
会话密钥的作用是加了加密在一次客户端与服务器端会话中所有发送的消息。
因此,一次登陆包括了两个大的步骤:
校验会话密钥和认证。
会话密钥校验过程:
1.服务器将自己的公钥和会话 id (个人猜测这里其实是可以使用请求的客户端的公钥进行加密的。客户端请求登陆的时候虽然不需要指
定密码,但还是要指定用户名的,将此用户名传送到服务器端后,服务器端就可以据用户名拿到对应的公钥文件。root用户的在 /root/.ssh文件夹下,
文件的名称由 /etc/ssh/sshd_config 引用的名字决定,一般为 authorized_keys,普通用户,如 lzh ,在 /home/lzh/.ssh文件夹下)
2.客户端接受到了服务器公钥和会话 id 后,根据特定的会话密钥生成算法(这里注意不要混淆,这里的生成算法不是前面的公钥私钥生成算
法),生成一个会话密钥,并使用服务器的公钥将这个会话密钥加密(设为 q )并发送到服务器端。
3.服务器端接受到了 q 后,用自己的密钥解密之,至此,服务器和客户端之间的会话密钥校验过程完毕。以后每一次该客户端与服务器之间
的通信都会使用 q 加密。
认证过程:(紧接上面的校验过程)
1.服务器随机生成一个数字,或字符串,设为 x ,使用服务器上已经存放好的客户端的公钥将 x 加密,发送到客户端。
2.客户端接受后使用自己的私钥解密得到 x ,计算 q + x 的 md5码发送到服务器端,而服务器端也作这样的计算,看两者结果是不是一样,
以此为据判断登陆成功与否。
非 root 用户使用公钥登陆时必须要注意以下几点:
1.用户的 .ssh 文件夹的 own 属性要改为该用户,且文件夹属性改为 700 ,因为可能操作时是由 root 为他创建的这个文件夹
2.拷贝到 .ssh文件夹下的 authorized_keys 的 own 要改为 该用户,同时也是防止是由root拷贝而来的,还要将文件属性改为 600.