经常使用ssh的都知道,可以通过公钥和密钥,来达到在登陆时无需输入密码,即可登陆成功,之前也做过,但时间久了多少忘记了些,先记录下相关问题,以备后用。

实验系统: Red Flag DC server 5.0 sp4 & Red Flag Asianux 3.0 sp2
Openssh版本: 4.0p1-1.7 & 4.3p2-29.1

基本原理:
简单来说,就是在 A 机上制作公钥和私钥,并把 A 机上的公钥拷贝到 B 机的 $HOME/.ssh/ 目录下,改名成 authorize_keys,当 A 机 ssh 到 B 机 时,A 机 会对会话标识符(session identifier)签名, 然后把结果送到 B 机中,B机收到请求后,会检查 $HOME/.ssh/authorized_keys 中是否有匹配的公钥,如果公钥匹配,则会使用公钥加密一个随机数(即challenge),并发送回 A 机,A 机收到随机数后,会使用 私钥 进行解密,最后再送回到B机,此时,链接正式建立。会话标识符来自共享的 Diffie-Hellman 值,只有 A 机和 B 机才知道这个值。
SSH协议第二版中有RSA和DSA两种算法认证,至于这两种算法的区别,暂且不做讨论,网上有很多解释,使用RAS这种算法足可满足其安全需求。

操作步骤:

1、在 A 机上执行 ssh-keygen -t rsa 回车,第一步设置文件存放位置,回车默认即可,第二和第三都是设置一个密码;
2、将 A 机上的/root/.ssh/id_rsa.pub 文件拷贝到 B机的 /root/.ssh 目录下,并改名成 authorized_keys ;
3、将 A 机上的/root/.ssh 目录权限设置为 600,将 B 机上的/root/.ssh 目录权限设置为 644 ;
4、双方ssh开启root允许登陆,并重启sshd服务。
5、在 A 机上 ssh 到 B 机上,进行测试,如果不需要密码,则设置成功。

如果想N多台机器之间互相无密码ssh登陆,可以将多台机器上的 id_rsa.pub 公钥放到同一个 authorized_keys 文件中,然后将 authorized_keys 分发到各台机器的 $HOME/.ssh/ 目录下。
换句话说, authorized_keys 文件里可以包含多台机器的公钥信息。