SSH+Google双重验证_HTTP协议_*WindTerm的使用

文章目录

一、SSH+Google Authenticator双重验证(多因素验证)

1、什么是Googel Authenticator及其作用

Google Authenticator是一种基于时间的一次性密码(TOTP)生成器。它通过手机应用生成短时间内有效的验证码,增加了额外的安全层。

2、Google动态认证+SSH密码方式与SSH免密连接的区别

“Google Authentication”结合SSH密码认证的方式是利用Google的身份验证服务(Google
Authenticator)来增强SSH(Secure
Shell)连接的安全性。下面是这种认证方式的具体内容以及它与SSH免密认证(密钥验证)的区别:

Google Authentication与SSH密码认证

1. Google Authenticator:

  • 功能:Google Authenticator是一种基于时间的一次性密码(TOTP)生成器。它通过手机应用生成短时间内有效的验证码,增加了额外的安全层。
  • 设置:用户在手机上安装Google Authenticator应用,并将其与SSH服务器关联。通常通过扫描二维码完成设置。
  • 使用方式:当用户尝试通过SSH连接到服务器时,除了输入常规密码外,还需要输入Google Authenticator生成的动态验证码。

2. 结合SSH密码认证:

  • 认证过程:在这种设置下,用户首先输入他们的用户名和静态密码(例如“1234”)。然后,系统会要求输入Google Authenticator生成的一次性密码。只有在输入了正确的验证码之后,用户才能成功登录。
  • 优势:这种方式结合了传统的静态密码和动态验证码,为SSH登录提供了双重验证(即多因素认证),显著增强了安全性。

SSH免密认证(密钥验证)

1. SSH免密认证(密钥验证):

  • 功能:SSH免密认证使用公钥/私钥对进行身份验证。用户生成一对密钥,其中私钥保存在用户的设备上,而公钥则被添加到服务器的授权密钥列表中。
  • 设置:用户在本地生成密钥对(通常是ssh-keygen命令),将公钥上传到服务器的~/.ssh/authorized_keys文件中。
  • 使用方式:当用户尝试通过SSH连接到服务器时,客户端会用私钥进行身份验证。服务器用公钥验证客户端提供的证据,从而确认用户的身份,无需输入密码。

2. 区别:

  • 认证方式
    • Google Authentication结合SSH密码认证:使用静态密码和动态验证码进行双重验证,提升了安全性。
    • SSH免密认证(密钥验证):只使用密钥对进行身份验证,无需密码和验证码。
  • 用户体验
    • Google Authentication结合SSH密码认证:用户需要输入密码和动态验证码,增加了登录过程的复杂性。
    • SSH免密认证(密钥验证):一旦设置完成,用户只需使用私钥进行登录,通常更为便捷。
  • 安全性
    • Google Authentication结合SSH密码认证:即使密码泄露,动态验证码也能提供额外的安全保护。
    • SSH免密认证(密钥验证):私钥的安全性至关重要,密钥对的保护机制通常比密码更安全,但如果私钥被盗,也会导致安全风险。

总体来说,Google
Authentication结合SSH密码认证提供了额外的安全层,而SSH免密认证(密钥验证)则通过密钥对提供了更为便捷和安全的认证方式。选择哪种方式通常取决于对安全性、便捷性和管理要求的具体需求。

3、需要被双重验证的机器安装Googel Authenticator服务

1)安装依赖
yum -y install pam-devel libpng-devel autoconf automake libtool
2)下载源码包
wget -O /app/google-authenticator-1.04.tgz http://test.driverzeng.com/other/1.04.tar.gz
# 或者到其他地方下载
3)解压源码
cd /app
tar -xf google-authenticator-1.04.tgz

在这里插入图片描述
在这里插入图片描述

4)构建、生成、编译安装
#构建
cd /app/google-authenticator-libpam-1.04
./bootstrap.sh

在这里插入图片描述

#生成
cd /app/google-authenticator-libpam-1.04
./configure.sh

生成结果:
在这里插入图片描述

#编译
cd /app/google-authenticator-libpam-1.04
make

编译结果:
在这里插入图片描述

#安装
cd /app/google-authenticator-libpam-1.04
make install

在Linux系统中:

  • make: 这是一个构建工具,负责自动化编译程序的过程。它读取 Makefile 文件,执行编译、链接等操作,将源代码转换为可执行文件或库文件。

  • make install: 这是 make 命令的一个后续步骤,用于将编译生成的文件(如可执行文件、库文件、配置文件等)安装到系统的标准目录中,如 /usr/local/bin
    /usr/local/lib,使其可以被系统和用户使用。

5)验证是否安装
ll /usr/local/lib/security

在这里插入图片描述
注:

/usr/local/lib/security/
目录通常用于存放系统中自定义的PAM模块。这些模块可以是第三方的或由管理员自定义编译的模块。

pam_google_authenticator.so 类型: pam_google_authenticator.so
是一个共享库文件(.so 是共享库的扩展名)。 功能: 这是 Google Authenticator PAM
模块的核心库文件。Google Authenticator
是一种基于时间的一次性密码(TOTP)生成器,用于提供双因素认证(2FA)。pam_google_authenticator.so
模块允许系统通过 Google Authenticator 应用生成的动态验证码来增强用户认证的安全性。 作用: 在 /etc/pam.d/
中配置此模块后,系统会要求用户在登录时输入一个由 Google Authenticator 生成的动态验证码,从而增加额外的安全层。
pam_google_authenticator.la 类型: pam_google_authenticator.la 是一个
libtool 动态库辅助文件,.la 文件是 libtool 的配置文件,用于描述如何链接和使用共享库。 功能: 虽然 .la
文件本身并不直接用于运行时链接,但它包含了有关如何构建和安装 .so
文件的信息。这种文件通常在开发和构建阶段有用,帮助系统了解库的位置和其他链接参数。 作用: 在现代系统中,.la
文件可能不再被广泛使用,因为它们已被 .pc 文件(pkg-config
配置文件)所取代。然而,它们仍然可以提供有关库文件的构建和链接信息。

4、需要被双重验证访问的机器配置Googel Authentication

1)生成验证码
  • Step1:需要被双重验证的机器中操作:
google-authenticator

在这里插入图片描述

  • Step2:需要连接那个配置Google认证的用户操作:
    安装Google Authenticator软件;
    进入软件后,扫描上述二维码,生成连接的GoogelAuthenticator验证码,像这样
    在这里插入图片描述
2)配置文件添加Google验证
  • Step1——将/usr/local/lib/security/pam_google_authenticator.so复制到/usr/lib64/security/系统库中
cp /usr/local/lib/security/pam_google_authenticator.so /usr/lib64/security/
  • Step2——添加认证添加到SSH认证里面
vim /etc/pam.d/sshd

在这里插入图片描述
注:

/etc/pam.d/ 目录和 /usr/local/lib/security/ 目录中的
pam_google_authenticator.la 和 pam_google_authenticator.so
文件都与PAM(Pluggable Authentication Modules,插拔式认证模块)相关。 /etc/pam.d/
目录包含了PAM(Pluggable Authentication
Modules)配置文件。PAM是一个在Unix和类Unix系统上用于认证的框架,它允许系统管理员为不同的服务定义不同的认证策略。每个PAM配置文件控制特定服务的认证行为,比如登录、su、sudo等。

  • 内容: /etc/pam.d/ 目录下的每个文件对应一个服务的PAM配置。例如,/etc/pam.d/sshd 文件定义了SSH服务的认证规则,/etc/pam.d/login 文件定义了系统登录的认证规则。
  • 结构: 每个文件中包含了PAM模块的配置行,指定了使用哪些PAM模块及其配置选项。每行的格式通常是 type control module [arguments],其中 type 是模块的类型(如 auth, account, password,
    session),control 是模块的控制标志(如 required, requisite, sufficient,
    optional),module 是模块的名称,arguments 是模块的参数
  • Step3修改SSH配置,改ChallengeResponseAuthentication为yes,并重启sshd
 vim /etc/ssh/sshd_config

在这里插入图片描述

#修改后重启sshd
systemctl restart sshd

5、验证是否成功配置了Google Authenticator+SSH双重验证

1)使用同网段内其他机器远程连接此机器:

在这里插入图片描述

2)Xshell中,连接选项改为“Keyboard Interactive”,后续连接,自行输入SSH密码+APP中生成的Google认证验证码

在这里插入图片描述
在这里插入图片描述

6、如何取消Googel认证

将4-2)中的Step2、Step3恢复原来状态

*二、WindTerm使用

相比Xshell远程连接工具,WindTerm的功能全面,包括命令补全,命令、脚本的发送,快捷命令的执行等等,具体自行下载探索

三、HTTP协议

1、基本概念:

1)HTTP全称:Hyper Text Transfer Protocol
2)Hyper Text:超文本,超链接+其他文本元素
3)URL全称:Uniform Resource Locator
4)URL组成:协议名://域名或IP:端口/文件名及其路径
  • 协议
    如:http://、ftp://、https://、file://等

  • 域名或ip

  • 端口
    默认端口,如:http的是80,默认端口可省略,如果不是默认端口则不能省略,
    如:https://editor.csdn.net/xxx是默认端口(443),如果改为666,则必须这样写才能正确访问:https://editor.csdn.net:666/xxx

  • 文件名及其路径

2、HTTP作用及其工作原理:

1)基本作用:

HTTP是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。

2)工作原理

浏览器与URL的服务器的交互流程:

  • 用户在浏览器地址栏输入URL
  • 浏览器对URL中的域名进行解析
    • 向本地DNS查询域名对应的IP
    • 向DNS服务器查询对应的IP
      • 递归查询
      • 迭代查询
        通过A记录返回给浏览器

A记录(Address Record)是DNS(Domain Name System)中用于将域名映射到IPv4地址的记录。具体来说,当你访问一个网站时,域名系统需要将域名(如
example.com)转换为一个可以在网络上路由的IP地址(如 192.0.2.1)。A记录就是用来实现这个映射的。

  • 作用: A记录告诉DNS服务器,给定的域名对应的IPv4地址是什么。
  • 示例: 如果你在DNS中查询 example.com,DNS返回的A记录可能是 192.0.2.1。这意味着当你访问 example.com 时,实际连接到的IP地址是 192.0.2.1

DNS解析过程中的递归查询和迭代查询

在DNS解析过程中,递归查询和迭代查询是两种不同的查询方法,用于从DNS系统中获取信息。以下是这两种查询的详细说明:

递归查询(Recursive Query)

递归查询是指DNS客户端(如浏览器)向DNS服务器发起请求,要求它完全解析该请求,并返回最终的结果。也就是说,DNS服务器需要承担解析整个域名的所有步骤,直到找到最终的结果或者确定该域名不存在。

  • 过程: 客户端发送请求给DNS服务器(通常是本地DNS解析器)。如果本地DNS解析器不能直接回答,它会代为向其他DNS服务器查询,直到找到最终的答案。
  • 特点:
    • 客户端只需要等待一次响应,不需要处理多个查询步骤。
    • DNS服务器需要处理整个解析过程,可能涉及多个DNS服务器的交互。
    • 这种查询方式通常用于DNS递归解析器(例如ISP提供的DNS服务器)。

迭代查询(Iterative Query)

迭代查询是指DNS客户端向DNS服务器发起请求,并要求该服务器提供最接近的答案。如果该DNS服务器没有所需的记录,它会返回一个指向其他DNS服务器的指示,客户端需要自行向这些服务器继续查询。

  • 过程: 客户端发送请求给DNS服务器,服务器提供一个部分答案或指向下一步查询的提示。如果DNS服务器不能直接提供所需的信息,它会返回指向其他DNS服务器的地址,客户端需要继续向这些服务器发起查询。
  • 特点:
    • 客户端可能需要进行多个查询步骤才能获得最终答案。
    • 每次查询返回的都是最接近的答案,客户端需自行继续查找。
    • 这种查询方式通常用于根DNS服务器和顶级域DNS服务器(如 .com.org 的DNS服务器)。

实际示例

假设你在浏览器中输入 www.example.com,想要解析其IP地址。过程可能如下:

  1. 递归查询:

    • 浏览器发起请求到本地DNS解析器。
    • 本地DNS解析器查找缓存。如果没有找到,它会开始递归查询,首先向根DNS服务器询问 example.com 的信息。
    • 根DNS服务器返回 example.com 的权威DNS服务器地址。
    • 本地DNS解析器然后向权威DNS服务器查询 example.com 的A记录,得到最终的IP地址。
    • 本地DNS解析器返回IP地址给浏览器。
  2. 迭代查询:

    • 浏览器直接向本地DNS解析器发起请求。
    • 本地DNS解析器向根DNS服务器查询 example.com
    • 根DNS服务器返回 example.com 的权威DNS服务器地址。
    • 本地DNS解析器再向权威DNS服务器查询 example.com 的A记录。
    • 权威DNS服务器提供最接近的答案(例如,提供另一DNS服务器的地址),本地DNS解析器继续查询直到获得IP地址。
    • 浏览器得到最终的IP地址。

通过这两种查询方式,DNS能够有效地将域名转换为IP地址,从而实现网络资源的访问。

  • 浏览器与解析的IP建立TCP连接(三次握手)
  • 远端IP主机通过TCP发送站点文件到本地浏览器中,浏览器建立缓存
  • 浏览器断开与远端IP的TCP连接(四次挥手)

3、HTTP请求方法

HTTP(超文本传输协议)定义了几种请求方法,每种方法都用于特定的操作和目的。这些请求方法是HTTP协议的核心,用于从客户端到服务器之间的通信。以下是HTTP常见请求方法的详细解释:

1. GET
  • 定义:用于请求访问指定的资源。它从服务器获取数据,并且请求不会对服务器上的数据造成任何改变。
  • 用途:获取页面、图像、数据等。
  • 特点
    • 请求参数通常附加在URL中(如?key=value)。
    • 请求结果会缓存。
    • 可以被书签化或分享。
2. POST
  • 定义:用于向服务器提交数据,以便处理或存储。数据通过请求体发送。
  • 用途:提交表单、上传文件、创建新资源等。
  • 特点
    • 数据被包含在请求体中,而不是URL中。
    • 不会缓存请求结果。
    • 通常用于创建资源或触发服务器端操作。
3. PUT
  • 定义:用于更新或替换服务器上的现有资源。请求体包含更新的数据。
  • 用途:更新已有资源的完整信息。
  • 特点
    • 如果资源存在,则会用请求体中的数据替换原有资源。
    • 如果资源不存在,可能会创建新资源(具体行为取决于服务器实现)。
4. DELETE
  • 定义:用于请求删除服务器上的资源。
  • 用途:删除指定资源。
  • 特点
    • 请求体通常为空。
    • 服务器处理请求后应删除资源,并返回相应的状态码表示删除结果。
5. HEAD
  • 定义:与GET方法类似,但只请求资源的头部,而不返回资源的实际内容。
  • 用途:检查资源的元数据(如内容类型、内容长度),或检查资源是否存在。
  • 特点
    • 可以用于检查资源的状态而不下载资源内容。
    • 常用于检测链接的有效性和资源的更新状态。
6. OPTIONS
  • 定义:用于查询服务器支持的HTTP方法和其他通信选项。
  • 用途:获取关于目标资源的通信选项信息。
  • 特点
    • 请求返回的响应头部包含允许的方法(如Allow头部)。
    • 常用于CORS(跨源资源共享)预检请求,以确定服务器是否允许跨源请求。
7. PATCH
  • 定义:用于部分更新资源,提交部分数据以更新资源的某些字段。
  • 用途:对资源进行部分更新,而不需要发送资源的完整表示。
  • 特点
    • 请求体包含部分更新的数据。
    • 适用于更新资源的一部分信息,而不是全部。
8. TRACE
  • 定义:用于诊断请求在服务器和客户端之间的传输路径。
  • 用途:测试和诊断请求路径的完整性。
  • 特点
    • 请求返回一个回显的消息,以显示请求经过的路径。
    • 常用于调试目的,通常不会在生产环境中使用。
9. CONNECT
  • 定义:用于建立一个隧道,以便通过HTTP代理进行后续的通信。
  • 用途:常用于HTTP代理服务器,以便建立安全的连接(如HTTPS)。
  • 特点
    • 请求后,代理服务器将与目标服务器建立一个TCP连接,客户端和目标服务器之间的数据通过这个隧道传输。
    • 常用于HTTPS连接的建立。
      总结

HTTP请求方法定义了客户端与服务器之间的不同交互方式,每种方法都用于特定的操作,了解这些方法有助于正确地构建和解析HTTP请求。

4、HTTP的状态码

1)200 OK 请求成功,响应中返回了请求所要的资源
2)3XX ——重定向状态码

表客户端需要进一步的操作才能完成请求

  • 301 Moved Permanently 永久重定向,请求的资源已被永久移动到新位置,响应中包含了新的URL
  • 302 Found 请求的资源临时移动等到新位置,响应中包含了新的URL。客户端应继续使用原来的URL进行以后的请求
  • 304 Not Modified 请求的资源未被修改,可以使用浏览器的缓存的副本
  • 307 Temporary Redirect 内部的重定向,请求的资源临时移动等到新位置,响应中不包含新的URL。客户端应继续使用原来的URL进行以后的请求
3)4XX ——客户端错误状态码

表示请求有错误或请求无法被服务器理解

  • 400 Bad Request 请求无效,服务器无法理解请求的格式
  • 401 Unauthorized 请求未授权,客户端需要提供认证信息
  • 403 Forbidden 服务器理解请求,但拒绝处理,可能由于权限问题
    如:在配置Nginx的默认跳转首页时,路径配成了Nginx启动用户访问不了的root所属的/root目录下,那么在访问时就会报403错误
    在这里插入图片描述
    在这里插入图片描述
  • 404 Not Found 请求的资源未找到
4)5XX ——服务器错误状态码

表示服务器在处理请求时发生了错误

  • 500 Insternal Server Error 服务器遇到未知错误
  • 502 Bad Gateway 后端服务问题,作为网关或者代理的服务器收到无效响应
  • 503 Service Unavailable 服务器当前无法处理请求,通常由于过载或维护
  • 504 Gateway Timeout 作为网关或代理的服务器未能及时接收到来自上游服务器的响应

“作为网关或代理的服务器未能及时接收到来自上游服务器的响应”是HTTP状态码504 Gateway Timeout的描述。这种情况发生在网络请求的处理过程中,特别是当一个服务器作为网关或代理时。下面详细解释这个过程:
背景
在网络架构中,网关和代理服务器常用于转发请求和响应。例如,反向代理服务器通常将客户端的请求转发给一个或多个上游服务器,然后将上游服务器的响应返回给客户端。

状态码 504 Gateway Timeout 的含义
504 Gateway Timeout 状态码表示当网关或代理服务器在等待来自上游服务器的响应时超时了。也就是说,网关或代理服务器没有在预定时间内收到上游服务器的响应,因此无法继续处理请求。

具体情境

  1. 客户端请求:客户端发送请求到网关或代理服务器。
  2. 请求转发:网关或代理服务器将请求转发给上游服务器(可能是应用服务器、数据库服务器等)。
  3. 等待响应:网关或代理服务器等待上游服务器处理请求并返回响应。
  4. 超时:如果上游服务器未能在网关或代理服务器设定的超时时间内返回响应,网关或代理服务器将返回504 Gateway Timeout状态码给客户端。

常见原因

  • 上游服务器故障:上游服务器可能由于故障、过载或配置错误无法处理请求。
  • 网络延迟或中断:网络问题导致网关或代理服务器无法与上游服务器建立有效连接。
  • 上游服务器超载:上游服务器处理请求的时间过长,可能是由于服务器负载过高或处理复杂度过大。

解决方法

  • 检查上游服务器:确保上游服务器运行正常,并能够及时响应请求。
  • 调整超时时间:可以在网关或代理服务器的配置中调整超时时间,以便给予上游服务器更多处理时间。
  • 网络诊断:检查网络连接,确保没有延迟或中断影响到网关和上游服务器之间的通信。
  • 性能优化:优化上游服务器的性能,以减少处理时间。

总之,504 Gateway Timeout 表示网关或代理服务器在等待上游服务器的响应时超时,通常涉及到网络、服务器负载或配置等问题。

*5、具体的HTTP状态码,参考如下:

HTTP状态码是Web服务器用来指示HTTP请求结果的三位数字代码。状态码通常分为五大类,每一类都有其特定的意义。下面是这些状态码的详细分类和具体说明:

1xx - 信息性状态码

这些状态码表示请求已被接收并且正在处理中。

  • 100 Continue:服务器已收到请求的初始部分,客户端可以继续发送请求的其余部分。
  • 101 Switching Protocols:服务器已理解客户端的请求,并且将根据客户端的请求切换协议。
2xx - 成功状态码

这些状态码表示请求已被成功处理。

  • 200 OK:请求成功,响应中包含了请求的资源。
  • 201 Created:请求成功,并且服务器创建了一个新的资源。通常在POST请求后返回。
  • 202 Accepted:请求已接受,但处理尚未完成。
  • 203 Non-Authoritative Information:请求成功,但返回的信息可能由不同的来源提供。
  • 204 No Content:请求成功,但服务器没有返回任何内容。通常在DELETE请求后返回。
  • 205 Reset Content:请求成功,要求客户端重置视图。
  • 206 Partial Content:服务器成功处理了部分GET请求,返回的部分资源符合请求中的范围。
3xx - 重定向状态码

这些状态码表示客户端需要进一步的操作才能完成请求。

  • 300 Multiple Choices:请求有多个可能的响应,客户端需要选择一个。
  • 301 Moved Permanently:请求的资源已被永久移动到新位置,响应中包含了新的URL。
  • 302 Found:请求的资源临时移动到新位置,响应中包含了新的URL。客户端应继续使用原来的URL进行以后的请求。
  • 303 See Other:请求的资源可以在另一个URL找到,客户端应使用GET方法访问该URL。
  • 304 Not Modified:请求的资源未被修改,可以使用缓存的副本。
  • 305 Use Proxy:请求的资源必须通过指定的代理访问。
  • 307 Temporary Redirect:请求的资源临时移动到新位置,客户端应继续使用原来的URL进行以后的请求。
  • 308 Permanent Redirect:请求的资源已被永久移动到新位置,客户端应使用新的URL进行以后的请求。
4xx - 客户端错误状态码

这些状态码表示请求有错误或请求无法被服务器理解。

  • 400 Bad Request:请求无效,服务器无法理解请求的格式。
  • 401 Unauthorized:请求未授权,客户端需要提供认证信息。
  • 402 Payment Required:保留状态码,通常用于需要支付的场景。
  • 403 Forbidden:服务器理解请求,但拒绝处理,可能由于权限问题。
  • 404 Not Found:请求的资源未找到。
  • 405 Method Not Allowed:请求方法不被允许。通常是因为服务器禁止使用该方法。
  • 406 Not Acceptable:请求的资源无法生成符合请求头中Accept字段的响应。
  • 407 Proxy Authentication Required:需要通过代理进行身份验证。
  • 408 Request Timeout:客户端请求超时,服务器在等待请求时超时。
  • 409 Conflict:请求与当前服务器状态发生冲突,通常用于资源冲突。
  • 410 Gone:请求的资源已被永久删除,不再可用。
  • 411 Length Required:服务器要求请求中包含Content-Length头部。
  • 412 Precondition Failed:请求中包含的先决条件失败。
  • 413 Payload Too Large:请求的负载过大,服务器无法处理。
  • 414 URI Too Long:请求的URI过长,服务器无法处理。
  • 415 Unsupported Media Type:请求的媒体类型不被支持。
  • 416 Range Not Satisfiable:请求的范围无法满足,通常用于文件下载。
  • 417 Expectation Failed:请求的期望无法被满足,通常用于Expect头部。
5xx - 服务器错误状态码

这些状态码表示服务器在处理请求时发生了错误。

  • 500 Internal Server Error:服务器遇到未知错误,无法完成请求。
  • 501 Not Implemented:服务器不支持请求的功能。
  • 502 Bad Gateway:作为网关或代理的服务器收到无效响应。
  • 503 Service Unavailable:服务器当前无法处理请求,通常由于过载或维护。
  • 504 Gateway Timeout:作为网关或代理的服务器未能及时接收到来自上游服务器的响应。
  • 505 HTTP Version Not Supported:服务器不支持请求中所使用的HTTP协议版本。

这些状态码帮助客户端理解服务器对请求的处理情况,从而采取相应的行动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值