多语言展示
当前在线:1695今日阅读:145今日分享:43

网络通信--SSH协议配置免密登录的原理解析

在前一篇经验(可参看下述经验引用)中,我们配置了两台linux主机免密登录,两台主机中,一台被视为客户机,一台被视为服务器,在客户机上生成一对公私钥,并通过命令将公钥发送给服务器,这样配置后,客户机在登录服务器时,就无需再次输入密码了。操作很简单,但愿意是啥呢? 其实也不难,这篇经验就给你答案。 0网络通信--SSH协议配置两台Linux主机免密登录
工具/原料
1

两台安装了Linux系统的电脑(或虚拟机)

2

两台机器已配置了免密登录(可参考上述经验引用)

方法/步骤
1

首先确定两条机器已经配置了免密登录,我们在一台机器上运行 ssh 用户@主机名 即可直接远程登录另一条机器(图1示)。在上篇配置免密登录的经验中,我们一个主要操作是在客户机上生成了一对公私钥,我们再次进入当前用户根目录下的 .ssh 目录,查看一下这对公私钥(图2示)。

2

公私钥听着还挺复杂的,其实就是两段文本,这两段文本的特点是利用他们自身对信息加密后只有对方能解密,并且两者无法进行推导(无法根据一个推算出另一个)。既然是文本,那就可以通过 vi 编辑器查看,我们分别查看一下这对公私钥(图示)。

4

那在免密登录过程中,远程机器是如何判断申请远程登录的机器就是授权登录文件列表中的某一台机器呢?还记得我们在向远程机器发送公钥的时候(ssh-copy-id命令)是需要输入对应用户的密码么?也就是说授权登录列表中的机器是知道远程机器的用户密码的,这个是免密登录的前提条件!那就剩下一个问题了,远程机器如何断定你确实是我授权列表中的一员了?过程如下:(也可参考图示)1. 你申请登录一台远程机器,会将你的公钥发送给这台远程机器2. 远程机器开始在授权列表中查找这条公钥,如果没有找到,对不起,你需要输入密码进行登录,如果可以找到,但因为公钥是公开的(这也是其被称为是公钥的原因),所以目前我只能认为你可能是授权列表中的机器3. 远程机器会随机生成一个字符串,保存起来4. 远程机器将这个随机字符串通过你发送过来的公钥进行加密,然后将加密串发送给你5. 这时轮到你工作了,你需要将这个加密串使用私钥进行解密,然后将解密后的字符串返回给远程机器(注意私钥是不会公开的,如果你是冒充的,你是不会有这个私钥的,你也无法解密这个加密串)6. 远程机器取出保存的随即串和你返回的解密串对比,如果一致,bingo,你已经证明了你就是我授权列表中的那台机器(你有那个公钥对应的私钥,就这么简单),远程登录成功!

5

这里我补充一点,SSH如果不通过公私钥这种形式,而是通过输入密码的形式远程登录,SSH是如何保证密码不被泄露呢?远程机器在开始SSH服务的时候(sshd)会自动生成一对公私钥(又是公私钥,这个东西真的很有用),当有机器申请远程登录的时候,会首先将公钥发送给这台申请登录的机器,这台机器此时也会自动生成一对公私钥(如果没有的话)然后也会将公钥发送给远程机器,这就是公钥交换步骤(交换公钥的意义在于后面用于生产共享秘钥,属于对称加密)。然后申请登录的机器会将登录密码通过远程机器的公钥加密后发送给远程机器进行校验,校验通过即登录成功。登录成功后,双方会通过己方的私钥和对方的公钥以及一个随机数(双方一致)生成一个一致的共享私钥(对称加密,通常为AES算法),后续的对话都是通过这个共享私钥进行加密的(这个有点类似HTTPS协议,认证阶段使用非对称加密更安全,数据传输阶段使用对称加密更高效)!

注意事项

公钥之所以成为公钥,就是因为他是可以公开的,拿着一个公钥去申请远程登录的机器,即使公钥在授权登录列表中,也不能确认他就是那台已授权的机器!,

推荐信息