jumpserver跳板机安装
命令集
####支持中文字符集
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
### 2.2 安装python依赖包
mount /dev/sr0 /media/cdrom
yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
yum -y install python36 python36-devel
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y clean all
yum makecache
yum -y install python36 python36-devel
cd /opt/
python3.6 -m venv py3
source /opt/py3/bin/activate
cd /opt/
git clone https://github.com/kennethreitz/autoenv.git
echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc
source ~/.bashrc
### 安装Jumpserver
cd /opt/
git clone https://github.com/jumpserver/jumpserver.git
echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env
cd jumpserver/
cd /opt/jumpserver/requirements/
yum -y install $(cat rpm_requirements.txt)
pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple
cd ~
mkdir .pip
vim ~/.pip/pip.conf
[global]
index-url=https://mirrors.aliyun.com/pypi/simple
[install]
trusted-host=mirrors.aliyun.com
cd /opt/jumpserver/requirements/
pip install -r requirements.txt
yum -y install redis
systemctl enable redis
systemctl start redis
yum -y install mariadb-devel mariadb-server
systemctl enable mariadb
systemctl start mariadb
DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 |head -c 24`
mysql -uroot -e "create database jumpserver default charset 'utf8';grant all on jumpserver.* to 'jumpserver'@'127.0.0.1'identified by '$DB_PASSWORD';flush privileges;"
cd /opt/jumpserver/
cp config_example.yml config.yml
SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc
BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc
sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml
sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml
sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml
sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml
sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml
sed -i "s/DB_PASSWORD:/DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml
cd /opt/jumpserver/utils/
bash make_migrations.sh
cd /opt/jumpserver/
./jms start all -d
### 3.1 安装SSH Server和WebSocket Server:Coco
cd /opt/
source /opt/py3/bin/activate
git clone https://github.com/jumpserver/coco.git
echo "source /opt/py3/bin/activate" > /opt/coco/.env
cd coco/
cd /opt/coco/requirements/
yum -y install $(cat rpm_requirements.txt)
pip install -r requirements.txt
cd /opt/coco/
mkdir keys logs
cp config_example.yml config.yml
sed -i "s/BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/coco/config.yml
sed -i "s/# LOG_LEVEL: INFO/LOG_LEVEL: ERROR/g" /opt/coco/config.yml
./cocod start -d
### 4 安装Web Terminal前端:Luna
cd /opt/
wget https://github.com/jumpserver/luna/releases/download/1.4.9/luna.tar.gz
tar xf luna.tar.gz
chown -R root:root luna
### 5 配置Nginx整合各组件
yum -y install yum-utils
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
yum -y install nginx
cd /etc/nginx/conf.d
rm -rf /etc/nginx/conf.d/default.conf
vim /etc/nginx/conf.d/jumpserver.conf
server {
listen 80;
client_max_body_size 100m;
location /luna/ {
try_files $uri / /index.html;
alias /opt/luna/;
}
location /media/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/;
}
location /static/ {
root /opt/jumpserver/data/;
}
location /socket.io/ {
proxy_pass http://localhost:5000/socket.io/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
location /coco/ {
proxy_pass http://localhost:5000/coco/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
location /guacamole/ {
proxy_pass http://localhost:8081/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
systemctl start nginx
systemctl enable nginx
实验环境 :CentOS 7.5 内存需要2G,关闭防火墙等
支持中文字符集
#修改字符集,否则可能报 input/output error的问题,因为日志里打印了中文
[root@bogon ~]# cat /etc/locale.conf
LANG="en_US.UTF-8"
[root@bogon ~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
[root@bogon ~]# export LC_ALL=zh_CN.UTF-8
[root@bogon ~]# echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
[root@bogon ~]# cat /etc/locale.conf
LANG="zh_CN.UTF-8"
安装python和python虚拟环境
需要支持的MySQL版本大于5.56
需要支持python3.6
#安装依赖包
[root@bogon ~]# mount /dev/sr0 /media/cdrom
[root@bogon ~]# yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
#安装Python3.6(方法一:如果下载速度慢,用下一个)
[root@bogon ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@bogon ~]# yum -y clean all
[root@bogon ~]# yum makecache
[root@bogon ~]# yum -y install python36 python36-devel
#查看版本,我们用python3
[root@bogon ~]# python3 -V
Python 3.6.6
[root@bogon ~]# python -V
Python 2.7.5
#或下载源码包(方法二)
[root@bogon ~]# cd /usr/local/src
[root@bogon src]# wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
[root@bogon src]# tar xf Python-3.6.1.tar.xz && cd Python-3.6.1
[root@bogon Python-3.6.1]# ./configure && make && make install
建立Python虚拟环境
因为CentOS 7 自带的是Python2,而Yum等工具依赖原来的Python,为了不扰乱原来分环境我们开始用Python虚拟环境
[root@bogon ~]# cd /opt/
[root@bogon opt]# python3.6
python3.6 python3.6m
[root@bogon opt]# python3.6 -m venv py3 #创建一个py3的虚拟环境
[root@bogon opt]# ls
py3
[root@bogon opt]# ls py3/ #里面是py3的虚拟环境
bin include lib lib64 pyvenv.cfg
[root@bogon opt]# source /opt/py3/bin/activate #使其生效
#看到下面的最左边(py3)代表成功,以后运行jumpserver都要先运行以上的source命令
#以下所有命令都在该虚拟环境中运行
(py3) [root@bogon opt]#
自动化载入Python虚拟环境,以防启动的时候忘记运行虚拟化
懒人必备,一次操作,永久生效,每次启动给的时候能记住运行py3虚拟化的忽略
(py3) [root@bogon opt]# cd /opt/
(py3) [root@bogon opt]# git clone https://github.com/kennethreitz/autoenv.git
正克隆到 'autoenv'...
remote: Enumerating objects: 671, done.
remote: Total 671 (delta 0), reused 0 (delta 0), pack-reused 671
接收对象中: 100% (671/671), 103.92 KiB | 50.00 KiB/s, done.
处理 delta 中: 100% (356/356), done.
(py3) [root@bogon opt]# echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc
(py3) [root@bogon opt]# source ~/.bashrc
安装Jumpserver
下载或Clone jumpserver项目
项目提交较多 git clone 时较大,可以选择去Github项目页直接下载zip包
(py3) [root@bogon opt]# cd /opt/
(py3) [root@bogon opt]# git clone https://github.com/jumpserver/jumpserver.git
正克隆到 'jumpserver'...
remote: Enumerating objects: 180, done.
remote: Counting objects: 100% (180/180), done.
remote: Compressing objects: 100% (128/128), done.
remote: Total 37894 (delta 95), reused 87 (delta 41), pack-reused 37714
接收对象中: 100% (37894/37894), 50.52 MiB | 55.00 KiB/s, done.
处理 delta 中: 100% (25815/25815), done.
#.env作用是只要进入jumpserver的目录下就自动进入py3的环境中
(py3) [root@bogon opt]# echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env
(py3) [root@bogon opt]# cd jumpserver/
autoenv:
autoenv: WARNING:
autoenv: This is the first time you are about to source /opt/jumpserver/.env:
autoenv:
autoenv: --- (begin contents) ---------------------------------------
autoenv: source /opt/py3/bin/activate$
autoenv:
autoenv: --- (end contents) -----------------------------------------
autoenv:
autoenv: Are you sure you want to allow this? (y/N) #首次进入会有询问 y
安装依赖RPM包
(py3) [root@bogon jumpserver]# cd /opt/jumpserver/requirements/
(py3) [root@bogon requirements]# ls
alpine_requirements.txt issues.txt requirements.txt
deb_requirements.txt mac_requirements.txt rpm_requirements.txt
(py3) [root@bogon requirements]# yum -y install $(cat rpm_requirements.txt)
安装Python库依赖
#先将setup工具升级
(py3) [root@bogon requirements]# pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple
#下面安装pip加速设置。
(py3) [root@bogon requirements]# cd ~
(py3) [root@bogon ~]# mkdir .pip
(py3) [root@bogon ~]# vim ~/.pip/pip.conf
[global]
index-url=https://mirrors.aliyun.com/pypi/simple
[install]
trusted-host=mirrors.aliyun.com
(py3) [root@bogon ~]# cd /opt/jumpserver/requirements/
(py3) [root@bogon requirements]# pip install -r requirements.txt
#上面命令,如果下载时卡在了某一个包不能继续(例如卡在python-gssapi包),可以wget软件包后执行pip install python-gssapi-0.6.4.tar.gz,然后将requirements.txt文件中的对用包的行注释掉就可以继续安装其他软件包了。但是有的包会卡的就是下不来,即使wget下来用pip install也没用,可以租阿里云的服务器实验,没多少钱
####### 出问题了 python-gssapi ########
python -m pip install --upgrade --force pip
pip install setuptools==33.1.1
easy_install -U setuptools
pip install jupyter
###########################################
安装Redis,Jumpserver 使用Redis做cache和celery borke
(py3) [root@bogon requirements]# yum -y install redis
(py3) [root@bogon requirements]# systemctl enable redis #加入开机启动
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.
(py3) [root@bogon requirements]# systemctl start redis
安装MySQL
(py3) [root@bogon requirements]# yum -y install mariadb-devel mariadb-server
(py3) [root@bogon requirements]# systemctl enable mariadb
(py3) [root@bogon requirements]# systemctl start mariadb
创建数据库Jumpserver并授权
(py3) [root@bogon requirements]# DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 |head -c 24`
(py3) [root@bogon requirements]# echo $DB_PASSWORD
LhPO29Zyt6gx60rB7u4NS5OT
(py3) [root@bogon requirements]# mysql -uroot -e "create database jumpserver default charset 'utf8';grant all on jumpserver.* to 'jumpserver'@'127.0.0.1'identified by '$DB_PASSWORD';flush privileges;"
修改Jumpserver配置文件
(py3) [root@bogon opt]# cd /opt/jumpserver/
(py3) [root@bogon jumpserver]# cp config_example.yml config.yml #备份并改名
(py3) [root@bogon jumpserver]# SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
(py3) [root@bogon jumpserver]# echo $SECRET_KEY
8xiFDGdiXqUHoLpbaZg9EZBmbh5HKN9bKMmEW9yMcNLkDZuxHJ
(py3) [root@bogon jumpserver]# echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc
(py3) [root@bogon jumpserver]# BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
(py3) [root@bogon jumpserver]# echo $BOOTSTRAP_TOKEN
vUYgfFFooZy43zpZ
(py3) [root@bogon jumpserver]# echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc
(py3) [root@bogon jumpserver]# sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml
(py3) [root@bogon jumpserver]# sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml
(py3) [root@bogon jumpserver]# sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml
(py3) [root@bogon jumpserver]# sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml
(py3) [root@bogon jumpserver]# sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml
(py3) [root@bogon jumpserver]# sed -i "s/DB_PASSWORD:/DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml
## 看看下面文件内容
(py3) [root@bogon jumpserver]# cat config.yml |egrep -v "#|^$"
SECRET_KEY: 8xiFDGdiXqUHoLpbaZg9EZBmbh5HKN9bKMmEW9yMcNLkDZuxHJ
BOOTSTRAP_TOKEN: vUYgfFFooZy43zpZ
DEBUG: false
LOG_LEVEL: ERROR
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: LhPO29Zyt6gx60rB7u4NS5OT
DB_NAME: jumpserver
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379



运行Jumpserver
#初始化数据
(py3) [root@bogon jumpserver]# cd /opt/jumpserver/utils/
(py3) [root@bogon utils]# bash make_migrations.sh
(py3) [root@localhost utils]# cd /opt/jumpserver/
(py3) [root@localhost jumpserver]# ./jms start all -d
(py3) [root@localhost jumpserver]# ss -antup |grep 8080
tcp LISTEN 0 128 *:8080 *:* users:(("gunicorn",pid=18844,fd=5),("gunicorn",pid=18843,fd=5),("gunicorn",pid=18842,fd=5),("gunicorn",pid=18841,fd=5),("gunicorn",pid=18838,fd=5))
##然后用自己的IP地址访问浏览器(宿主机映射)IP:8080
安装SSH Server 和Web Socket Sercer: Coco
(py3) [root@localhost jumpserver]# cd /opt/
(py3) [root@localhost opt]# source /opt/py3/bin/activate
(py3) [root@localhost opt]# git clone https://github.com/jumpserver/coco.git
(py3) [root@localhost opt]# echo "source /opt/py3/bin/activate" > /opt/coco/.env
(py3) [root@localhost opt]# cd coco/
autoenv:
autoenv: WARNING:
autoenv: This is the first time you are about to source /opt/coco/.env:
autoenv:
autoenv: --- (begin contents) ---------------------------------------
autoenv: source /opt/py3/bin/activate$
autoenv:
autoenv: --- (end contents) -----------------------------------------
autoenv:
autoenv: Are you sure you want to allow this? (y/N) y
安装依赖
(py3) [root@localhost coco]# cd /opt/coco/requirements/
#安装rpm依赖
(py3) [root@localhost requirements]# yum -y install $(cat rpm_requirements.txt)
# 安装python依赖
(py3) [root@localhost requirements]# pip install -r requirements.txt
修改coco配置文件
(py3) [root@localhost requirements]# cd /opt/coco/
(py3) [root@localhost coco]# ls
coco config_example.yml entrypoint.sh locale README.md run_server.py
cocod Dockerfile LICENSE logo.txt requirements utils
(py3) [root@localhost coco]# mkdir keys logs
(py3) [root@localhost coco]# cp config_example.yml config.yml
(py3) [root@localhost coco]# sed -i "s/BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/coco/config.yml
(py3) [root@localhost coco]# sed -i "s/# LOG_LEVEL: INFO/LOG_LEVEL: ERROR/g" /opt/coco/config.yml
# 打开看了看
(py3) [root@localhost coco]# vim config.yml
1 # 项目名称, 会用来向Jumpserver注册, 识别而已, 不能重复
2 # NAME: {{ Hostname }}
3
4 # Jumpserver项目的url, api请求注册会使用
5 CORE_HOST: http://127.0.0.1:8080
6
7 # Bootstrap Token, 预共享秘钥, 用来注册coco使用的service account和terminal
8 # 请和jumpserver 配置文件中保持一致,注册完成后可以删除
9 BOOTSTRAP_TOKEN: tpBIk3yJK11JNfm8
10
11 # 启动时绑定的ip, 默认 0.0.0.0
12 # BIND_HOST: 0.0.0.0
13
14 # 监听的SSH端口号, 默认2222
15 # SSHD_PORT: 2222
16
17 # 监听的HTTP/WS端口号,默认5000
18 # HTTPD_PORT: 5000
19
20 # 项目使用的ACCESS KEY, 默认会注册,并保存到 ACCESS_KEY_STORE中,
21 # 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret
22 # ACCESS_KEY: null
23
24 # ACCESS KEY 保存的地址, 默认注册后会保存到该文件中
25 # ACCESS_KEY_FILE: data/keys/.access_key
26
27 # 加密密钥
28 # SECRET_KEY: null
29
30 # 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL]
31 LOG_LEVEL: ERROR
启动 coco
(py3) [root@localhost coco]# ./cocod start -d
(py3) [root@localhost coco]# ss -antup |grep 2222
tcp LISTEN 0 5 *:2222 *:* users:(("python3",pid=50654,fd=8))
(py3) [root@localhost coco]# ss -antup |grep 5000
tcp LISTEN 0 50 *:5000 *:* users:(("python3",pid=50654,fd=9))
安装Web Terminal前端:Luna
(py3) [root@localhost coco]# cd /opt/
#如果网络有问题那么去网址:
#wget https://demo.jumpserver.org/download/luna/1.4.9/luna.tar.gz
(py3) [root@localhost opt]# wget https://github.com/jumpserver/luna/releases/download/1.4.9/luna.tar.gz
(py3) [root@localhost opt]# tar xf luna.tar.gz
(py3) [root@localhost opt]# chown -R root:root luna
配置Nginx整合各组件
(py3) [root@localhost opt]# yum -y install yum-utils
(py3) [root@localhost opt]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
(py3) [root@localhost opt]# yum -y install nginx
(py3) [root@localhost opt]# cd /etc/nginx/conf.d
(py3) [root@localhost conf.d]# rm -rf /etc/nginx/conf.d/default.conf
(py3) [root@localhost conf.d]# vim /etc/nginx/conf.d/jumpserver.conf 看教案
server {
listen 80; #代理端口,以后将通过此端口进行访问,不再通过8080
#server_name demo.jumperser.org; #修改成你的域名或者注释掉
client_max_body_size 100m; #录像即文件上传大小限制
location /luna/ {
try_files $uri / /index.html;
alias /opt/luna/; # luna 路径。如果修改安装目录。此处需要修改
}
location /media/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/; # 录像位置,如果修改安装目录,此处需要修改
}
location /static/ {
root /opt/jumpserver/data/; # 静态资源,如果修改安装目录,此处需要修改
}
location /socket.io/ {
proxy_pass http://localhost:5000/socket.io/; #如果coco安装在别的服务器,填写IP
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
location /coco/ {
proxy_pass http://localhost:5000/coco/; #如果coco安装在别的服务器,填写IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
location /guacamole/ {
proxy_pass http://localhost:8081/; #如果guacamole安在别的目录,填写IP
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
location / {
proxy_pass http://localhost:8080; #如果jumpserver安在别的目录,填写IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
(py3) [root@localhost conf.d]# systemctl start nginx
(py3) [root@localhost conf.d]# systemctl enable nginx




377




被折叠的 条评论
为什么被折叠?



