SSH实现免密登录及其原理

本文最近更新于2021.11.25

(一)ssh免密登录原理

客户端私钥是自己独有的,公钥是公开的。服务器公钥加密后的数据只有客户端使用自己的私钥才能解密

 challenge指公钥加密“质询”

认证过程分为两个步骤。

会话密钥(session key)生成

客户端请求连接服务器,服务器将 As 发送给客户端。

服务器生成会话ID(session id),设为 p,发送给客户端。

客户端生成会话密钥(session key),设为 q,并计算 r = p xor q。

客户端将 r 用 As 进行加密,结果发送给服务器。

服务器用 Bs 进行解密,获得 r。

服务器进行 r xor p 的运算,获得 q。

至此服务器和客户端都知道了会话密钥q,以后的传输都将被 q 加密。

认证

服务器生成随机数 x,并用 Ac 加密后生成结果 S(x),发送给客户端

客户端使用 Bc 解密 S(x) 得到 x

客户端计算 q + x 的 md5 值 n(q+x),q为上一步得到的会话密钥

服务器计算 q + x 的 md5 值 m(q+x)

客户端将 n(q+x) 发送给服务器

服务器比较 m(q+x) 和 n(q+x),两者相同则认证成功

(二)免密登录配置

ssh 配置文件位于/etc/ssh/sshd_config

如果需要允许root用户远程登录,那么vi /etc/ssh/sshd_config  搜索字符串Root,找到允许root登录那行,去掉注释,把no改为yes

ssh ip  远程登录,如果不能访问,可能是目标主机没有允许ssh通过防火墙,使用iptables -F清空再次尝试

密钥登录配置步骤:

目标:A主机免密码登录B主机

A主机 :  ssh-keygen   创建密钥

                  ssh-copy-id ipofB   复制密钥到B主机,回车后需要输入B的密码(这样以后就可以直接免密码登录到B主机中了).如果想一台主机免密登陆多台主机的话,则多次使用ssh-copy-id user@ip就可以了。

B主机:需要提前修改配置文件,允许root用户远程登录修改PermitRootLogin为 yes(如果没有修改该项目,复制密钥到本机时会提示没有权限),并且修改登录方式PasswordAuthentication 为no

               重启服务器,在A主机上即可免密码登录

注意把PasswordAuthentication 改为no之后,再尝试使用密码登录,会提示未授权,需要将其改为yes后才可以使用密码登录

 PS:配置免密登录后,可以直接ssh ip "command" 来远程执行命令,而不用进入远程终端。 

posted on 2017-10-25 18:06  标配的小号  阅读(1447)  评论(0编辑  收藏  举报

导航