ssh配置原理

当服务器SSH服务启动,客户端也安装了SSH后,就可以进行连接了。

客户端向服务端发送连接请求。
客户端连接服务器有两种方式:1. 密码登录。2. 密钥登录。
客户端通过SSH工具连接服务端。相关信息通过明文发送,发送的请求包括IP地址和用户名,服务器识别对应的客户端公钥(保存在$HOME/.ssh/authorized_keys中),找到该公钥后,服务器通过公钥加密一段随机字符串,并使用共享密钥加密后发送给客户端。如果未找到公钥,则需要输入密码。

服务端返回公钥信息
根据客户端所使用的服务协议版本及算法设置,返回相应公钥信息。比如,默认情况下,客户端通过 SSH V2 版协议,基于 RSA 算法建立连接,则服务端将 ssh_host_rsa_key.pub 文件中的内容返回客户端。相关信息通过明文发送。

客户端对服务端公钥信息进行比对和确认

客户端接收到服务端公钥信息后,会进行如下比对,并让用户对相关信息进行确认。

  • 如果用户输入 no ,则连接中断并报错(Host key verification failed)。
  • 如果用户输入 yes,则会将相应的公钥信息,保存到当前用户家目录下 .ssh 目录内的 known_hosts 文件中。

如果服务端因重装系统等因素导致公钥指纹出现变化,则会直接导致连接失败(报错Host key verification failed),则需要删除已保存的条目后再重新连接。
如果之前已经成功连接,而且公钥指纹对比一致,则会继续下一步操作。
Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey®,然后将加密后信息发送给Client。

Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。

Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。

Server端会最后比较Digest1和Digest2是否相同,完成认证过程


 

后续登录校验及正常的数据传输,都会通过双向加密方式进行。相关交互说明如下:

如果服务端需要发送数据给客户端:
服务端使用所持有的客户端公钥,对需要传输的数据进行加密,再发送给客户端。
客户端收到信息后,使用所持有的自身私钥解密后获取数据。
如果客户端需要发送数据给服务端,也是类似的流程:
客户端使用所持有的服务端公钥,对需要传输的数据进行加密,再发送给服务端。
服务端收到信息后,使用所持有的自身私钥解密后获取数据。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值