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" 来远程执行命令,而不用进入远程终端。