Академический Документы
Профессиональный Документы
Культура Документы
00A0 2203∃ 2200∀ 2286⊆ 2713x 27FA⇐⇒ 221A 221B 3 2295⊕ 2297⊗
Jumpserver Documentation
�� latest
Jumpserver team
2020 � 02 � 01 �
Contents
1 ���� 3
2 ���� 5
2.1 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Docker �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 ����������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.5 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.6 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3 ���� 77
3.1 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.2 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.3 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
3.4 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
3.5 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
3.6 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
3.7 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.8 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
4 ���� 129
4.1 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4.2 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
4.3 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
4.4 Web�� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
4.5 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
5 ���� 135
5.1 REST API���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
5.2 Jumpserver ����(Draft) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
5.3 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
5.4 API �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
5.5 API �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
6 ��� 147
7 ���� 149
i
7.1 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
7.2 QQ � . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
7.3 Github . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
7.4 �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
7.5 Demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
7.6 �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
8 Snapshot �� 151
8.1 ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
8.2 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
8.3 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
8.4 Linux �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
8.5 Windows �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
9 FAQ 155
9.1 MFA ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
9.2 LDAP ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
9.3 Docker ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
9.4 Radius ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
9.5 Jms_core ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
9.6 Jms_koko ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
9.7 Jms_guacamole ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
9.8 Windows SSH ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
9.9 ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
9.10 Nginx SSL ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
9.11 Firewalld ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
9.12 ������������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
9.13 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
10 ���� 177
10.1 1.5.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
10.2 1.5.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
10.3 1.5.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
10.4 1.5.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
10.5 1.5.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
10.6 1.5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
10.7 1.5.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
10.8 1.4.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
10.9 1.4.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
10.10 1.4.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
10.11 1.4.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
10.12 1.4.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
10.13 1.4.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
10.14 1.4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
10.15 1.4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
10.16 1.4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
10.17 1.4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
10.18 1.4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
10.19 1.3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
10.20 1.3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
10.21 1.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
10.22 1.3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
10.23 1.2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
10.24 1.1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
ii
10.25 1.1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
10.26 1.0.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
10.27 0.5.0beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
10.28 0.4.0beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
10.29 0.3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
10.30 0.3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
10.31 0.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
10.32 0.3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
10.33 0.2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
10.34 0.1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
10.35 0.1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
iii
iv
Jumpserver Documentation, �� latest
���
Contents 1
Jumpserver Documentation, �� latest
2 Contents
CHAPTER 1
����
3
Jumpserver Documentation, �� latest
4 Chapter 1. ����
CHAPTER 2
����
2.1 ����
2.1.1 ���������
��
• ����� Centos7 ��
• ���������
����
��������������
,→ fi \
(����)
5
Jumpserver Documentation, �� latest
(���)
&& if [ "$(getenforce)" != "Disabled" ]; then setsebool -P httpd_can_network_connect 1;
,→ fi
6 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
&& source ~/.bashrc \
&& if [ "$DB_PASSWORD" = "" ]; then DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 |␣
,→head -c 24`; fi \
&& if [ "$Server_IP" = "" ]; then Server_IP=`ip addr | grep 'state UP' -A2 | grep inet␣
,→| egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 |␣
,→cut -d / -f1`; fi \
,→PASSWORD/g" /opt/jumpserver/config.yml; fi
,→wojiushixiaobai/jms_koko:1.5.6 \
,→wojiushixiaobai/jms_guacamole:1.5.6 \
��
• ����� Centos7 (7.x)
• ���� ���
• �� root ����
���������, ������, �����������
Koko�Guacamole �����(��)
2.1. ���� 7
Jumpserver Documentation, �� latest
$ cd /opt
$ yum -y install wget
$ wget -O /opt/jms_install.sh https://demo.jumpserver.org/download/jms_install.sh
$ sh jms_install.sh
# ������������, �������������
$ systemctl start jms_core # ����� jms_core ��������
$ docker start jms_koko
$ docker start jms_guacamole
# ��
$ docker stop jms_koko
$ docker stop jms_guacamole
$ systemctl stop jms_core # ������������� jms_core
# ������
$ systemctl status jms_core
$ docker logs -f jms_koko
$ docker logs -f jms_guacamole
Koko�Guacamole ����(�������)
# ������������, �������������
$ systemctl start jms_core # ����� jms_core ��������
$ systemctl start jms_koko
$ systemctl start jms_guacamole
# ��
$ systemctl stop jms_guacamole
$ systemctl stop jms_koko
$ systemctl stop jms_core # ������������� jms_core
# ����
$ systemctl status jms_core
$ systemctl status jms_koko
$ systemctl status jms_guacamole
2.2 Docker ��
8 Chapter 2. ����
Jumpserver Documentation, �� latest
# ��������, ���
$ if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head␣
,→-c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo
,→$SECRET_KEY; fi
��
• �����: http://<�������IP>
• SSH ��: ssh -p 2222 <�������IP>
• XShell ������ connection ��, �� ssh �� 2222
• ������� admin �� admin
�������
• mysql �������� 5.6
• mariadb �������� 5.5.6
• ������� uft8
�����
• ��������
# mysql
$ create database jumpserver default charset 'utf8';
$ grant all on jumpserver.* to 'jumpserver'@'%' identified by 'weakPassword';
������
• SECRET_KEY = **
• BOOTSTRAP_TOKEN = **
• DB_HOST = mysql_host
• DB_PORT = 3306
• DB_USER = jumpserver
• DB_PASSWORD = weakPassword
• DB_NAME = jumpserver
• REDIS_HOST = 127.0.0.1
2.2. Docker �� 9
Jumpserver Documentation, �� latest
• REDIS_PORT = 6379
• REDIS_PASSWORD =
• VOLUME /opt/jumpserver/data/media
• VOLUME /var/lib/mysql
����
• https://github.com/jumpserver/Dockerfile
2.3 �����������
2.3.1 ����
2.3.2 ����
10 Chapter 2. ����
Jumpserver Documentation, �� latest
2.3.3 �������(��CentOS 7)
CentOS 7 ����
��
• # ��������
• > ��������� mysql ���
• $ �������������
���������� ����
������������ FAQ ��
��
• ��: CentOS 7
• IP: 192.168.244.144
• ��: /opt
• ���: mariadb
• ��: nginx
����
$ yum update -y
$ setenforce 0
$ sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# �����
(����)
2.3. ����������� 11
Jumpserver Documentation, �� latest
(���)
$ yum -y install wget gcc epel-release git
,→privileges;"
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
# �� Python3.6
$ yum -y install python36 python36-devel
# �� Jumpserver
$ cd /opt/
$ git clone --depth=1 https://github.com/jumpserver/jumpserver.git
# ���� RPM �
$ yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt)
# �� Python ���
$ pip install wheel
$ pip install --upgrade pip setuptools
(����)
12 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
$ pip install -r /opt/jumpserver/requirements/requirements.txt
# �� Jumpserver ����
$ cd /opt/jumpserver
$ cp config_example.yml config.yml
$ vi config.yml # ���������
# Development env open this, when error occur display the full process track, Production␣
,→disable it
# DEBUG �� ��DEBUG��������������
DEBUG: false
# ����
LOG_LEVEL: ERROR
# LOG_DIR:
# Session expiration setting, Default 24 hour, Also set expired on on browser close
# ���Session����, ��24��, �������������
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
2.3. ����������� 13
Jumpserver Documentation, �� latest
(���)
# See https://docs.djangoproject.com/en/1.10/ref/settings/#databases
# SQLite setting:
# �����sqlite���
# DB_ENGINE: sqlite3
# DB_NAME:
# OTP settings
# OTP/MFA ��
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver
# �� Jumpserver
$ cd /opt/jumpserver
$ ./jms start -d # ������ -d ��./jms start -d
# ����������, ����./jms start|stop|status all ������� -d ��
(����)
14 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
$ chmod 755 /usr/lib/systemd/system/jms.service
$ systemctl enable jms # ����
$ firewall-cmd --reload
# 172.17.0.x �docker�����IP�, ��������ip��, ������������IP
# ������� IP
$ Server_IP=`ip addr | grep 'state UP' -A2 | grep inet | egrep -v '(127.0.0.
,→1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1`
,→jms_koko:1.5.6
,→jms_guacamole:1.5.6
$ cd /opt
$ wget https://github.com/jumpserver/luna/releases/download/1.5.6/luna.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/luna/1.5.6/luna.tar.gz
$ tar xf luna.tar.gz
$ chown -R root:root luna
# �� Nginx �����
$ rm -rf /etc/nginx/conf.d/default.conf
$ vi /etc/nginx/conf.d/jumpserver.conf
(����)
2.3. ����������� 15
Jumpserver Documentation, �� latest
(���)
server {
listen 80;
# server_name _;
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 /koko/ {
proxy_pass http://localhost:5000;
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 /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 /ws/ {
proxy_pass http://localhost:8070;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
(����)
16 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
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;
access_log off;
}
}
# �� Nginx
$ nginx -t # ��������, �������
$ systemctl start nginx
2.3.4 �������(��CentOS 8)
CentOS 8 ����
��
• # ��������
• > ��������� mysql ���
• $ �������������
������������ FAQ ��
��
• ��: CentOS 8
2.3. ����������� 17
Jumpserver Documentation, �� latest
• IP: 192.168.244.144
• ��: /opt
• ���: mariadb
• ��: nginx
����
$ yum update -y
$ setsebool -P httpd_can_network_connect 1
# �����
$ yum -y install wget gcc epel-release git
,→privileges;"
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
18 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
$ systemctl enable nginx
# �� Python3.6
$ yum -y install python36 python36-devel
# �� Jumpserver
$ cd /opt/
$ git clone --depth=1 https://github.com/jumpserver/jumpserver.git
# ���� RPM �
$ yum -y install gcc krb5-devel libtiff-devel libjpeg-devel libzip-devel freetype-devel␣
,→libwebp-devel tcl-devel tk-devel sshpass openldap-devel mariadb-devel libffi-devel␣
# �� Python ���
$ pip install wheel
$ pip install --upgrade pip setuptools
$ pip install -r /opt/jumpserver/requirements/requirements.txt
# �� Jumpserver ����
$ cd /opt/jumpserver
$ cp config_example.yml config.yml
$ vi config.yml # ���������
2.3. ����������� 19
Jumpserver Documentation, �� latest
(���)
# ���� ��������������, ����, PS: ������
SECRET_KEY:
# Development env open this, when error occur display the full process track, Production␣
,→disable it
# DEBUG �� ��DEBUG��������������
DEBUG: false
# ����
LOG_LEVEL: ERROR
# LOG_DIR:
# Session expiration setting, Default 24 hour, Also set expired on on browser close
# ���Session����, ��24��, �������������
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
# SQLite setting:
# �����sqlite���
# DB_ENGINE: sqlite3
# DB_NAME:
20 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
# REDIS_DB_CELERY: 3
# REDIS_DB_CACHE: 4
# OTP settings
# OTP/MFA ��
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver
# �� Jumpserver
$ cd /opt/jumpserver
$ ./jms start -d # ������ -d ��./jms start -d
# ����������, ����./jms start|stop|status all ������� -d ��
# �� podman ���
$ vi /etc/containers/registries.conf
...
[registries.search]
# registries = ['registry.redhat.io', 'quay.io', 'docker.io']
registries = ['dockerhub.azk8s.cn', 'docker.mirrors.ustc.edu.cn', 'docker.io']
...
$ firewall-cmd --reload
# 10.88.0.x � podman �����IP�, ��������ip��, ������������IP
# ������� IP
$ Server_IP=`ip addr | grep 'state UP' -A2 | grep inet | egrep -v '(127.0.0.
,→1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1`
2.3. ����������� 21
Jumpserver Documentation, �� latest
(���)
$ docker run --name jms_koko -d -p 2222:2222 -p 127.0.0.1:5000:5000 -e CORE_HOST=http://
,→$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN wojiushixiaobai/jms_koko:1.5.6
$ cd /opt
$ wget https://github.com/jumpserver/luna/releases/download/1.5.6/luna.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/luna/1.5.6/luna.tar.gz
$ tar xf luna.tar.gz
$ chown -R root:root luna
# �� Nginx �����
$ rm -rf /etc/nginx/conf.d/default.conf
$ vi /etc/nginx/conf.d/jumpserver.conf
server {
listen 80;
# server_name _;
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 /koko/ {
proxy_pass http://localhost:5000;
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;
(����)
22 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
}
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 /ws/ {
proxy_pass http://localhost:8070;
proxy_http_version 1.1;
proxy_buffering off;
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 / {
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;
access_log off;
}
}
# �� Nginx
$ nginx -t # ��������, �������
$ systemctl start nginx
2.3. ����������� 23
Jumpserver Documentation, �� latest
(���)
��
• # ��������
• > ��������� mysql ���
• $ �������������
������������ FAQ ��
��
����
1.1 �����
1.3 �� MySQL
����� Mysql �����, ����� Mysql ������ Mysql �����
24 Chapter 2. ����
Jumpserver Documentation, �� latest
,→privileges;"
1.5 �� Python3.6
$ cd /opt
$ python3.6 -m venv py3
$ source /opt/py3/bin/activate
�. �� Jumpserver
$ cd /opt/
$ git clone --depth=1 https://github.com/jumpserver/jumpserver.git
2.2 �����
$ cd /opt/jumpserver/requirements
$ apt-get -y install $(cat deb_requirements.txt)
$ cd /opt/jumpserver
$ cp config_example.yml config.yml
2.3. ����������� 25
Jumpserver Documentation, �� latest
(���)
$ 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
# Development env open this, when error occur display the full process track, Production␣
,→disable it
# DEBUG �� ��DEBUG��������������
DEBUG: false
# ����
LOG_LEVEL: ERROR
# LOG_DIR:
# Session expiration setting, Default 24 hour, Also set expired on on browser close
# ���Session����, ��24��, �������������
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
# SQLite setting:
# �����sqlite���
# DB_ENGINE: sqlite3
# DB_NAME:
26 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
# OTP settings
# OTP/MFA ��
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver
2.5 �� Jumpserver
$ cd /opt/jumpserver
$ ./jms start -d # ������ -d ��./jms start -d
�����, �������
3.1 �� Docker
(����)
2.3. ����������� 27
Jumpserver Documentation, �� latest
(���)
$ apt-get -y update
$ apt-get -y install docker-ce
$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.
,→daocloud.io
3.2 �� koko
,→jms_koko:1.5.6
4.1 �� Guacamole
,→jms_guacamole:1.5.6
$ cd /opt/
$ wget https://github.com/jumpserver/luna/releases/download/1.5.6/luna.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/luna/1.5.6/luna.tar.gz
$ tar xf luna.tar.gz
$ chown -R root:root luna
�. �� Nginx �����
6.1 �� Nginx
28 Chapter 2. ����
Jumpserver Documentation, �� latest
$ rm -rf /etc/nginx/conf.d/default.conf
$ vim /etc/nginx/conf.d/jumpserver.conf
server {
listen 80;
server_name _;
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 /koko/ {
proxy_pass http://localhost:5000;
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 /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;
access_log off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /ws/ {
proxy_pass http://localhost:8070;
proxy_http_version 1.1;
proxy_buffering off;
(����)
2.3. ����������� 29
Jumpserver Documentation, �� latest
(���)
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 / {
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;
}
6.3 �� Nginx
$ nginx -t # ���������
$ systemctl restart nginx
2.3.6 �������(��CentOS 7)
������� - ����
30 Chapter 2. ����
Jumpserver Documentation, �� latest
��
• ��: CentOS 7
• ��� IP: 192.168.100.10 192.168.100.11 192.168.100.12
• Redis ip: 192.168.100.20
• Jumpserver IP: 192.168.100.30
• koko IP: 192.168.100.40
• Guacamole IP: 192.168.100.50
• Tengine �� IP: 192.168.100.100
��
��
�������� Tengine ������� ���� HA � ��, ������������, ������, ��� Tengine ����������(��)� �����������������������
��
• # ��������
• $ �������������
��
• ��: CentOS 7
• IP: 192.168.100.100
2.3. ����������� 31
Jumpserver Documentation, �� latest
����
# ����
$ yum upgrade -y
# �� epel-release �
$ yum -y install epel-release
$ firewall-cmd --reload
# �� selinux
$ setenforce 0
$ sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# �� Tengine
# ��� http://tengine.taobao.org/
# �� luna
$ cd /opt
$ wget https://github.com/jumpserver/luna/releases/download/1.5.6/luna.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/luna/1.5.6/luna.tar.gz
$ tar xf luna.tar.gz
$ chown -R root:root luna
# �� Nginx
$ vi /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
stream {
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
(����)
32 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_
,→ connect_time"';
upstream MariaDB {
server 192.168.100.10:3306;
server 192.168.100.11:3306 backup; # ���
server 192.168.100.12:3306 down; # ���
# ��� Mariadb ���ip
}
upstream kokossh {
server 192.168.100.40:2222;
server 192.168.100.40:2223; # ���
# ��� koko ssh ���ip
least_conn;
}
server {
listen 3306;
proxy_pass MariaDB;
proxy_connect_timeout 1s; # detect failure quickly
}
server {
listen 2222;
proxy_pass kokossh;
proxy_protocol on;
proxy_connect_timeout 1s; # detect failure quickly
}
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
# tcp_nopush on;
keepalive_timeout 65;
# ������
server_tokens off;
(����)
2.3. ����������� 33
Jumpserver Documentation, �� latest
(���)
include /etc/nginx/conf.d/*.conf;
}
# ���������
$ mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.bak
$ vi /etc/nginx/conf.d/jumpserver.conf
upstream jumpserver {
server 192.168.100.30:80;
# ��� jumpserver ���ip
}
upstream koko {
server 192.168.100.40:5000 weight=1;
server 192.168.100.40:5001 weight=1; # ���
# ��� koko ���ip
ip_hash;
}
upstream guacamole {
server 192.168.100.50:8081 weight=1;
server 192.168.100.50:8082 weight=1; # ���
# ��� guacamole ���ip
ip_hash;
}
server {
listen 80;
server_name www.jumpserver.org; # ���������
return 301 https://$server_name$request_uri;
}
server {
# ���� https ��, ����� https ����������
listen 443 ssl;
server_name demo.jumpserver.org; # ���������
ssl on;
ssl_certificate /etc/nginx/sslkey/1_jumpserver.org_bundle.crt; # ������
ssl_certificate_key /etc/nginx/sslkey/2_jumpserver.org.key; # ������
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!
,→RC4;
location / {
proxy_pass http://jumpserver; # jumpserver
(����)
34 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
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 /luna/ {
try_files $uri / /index.html;
alias /opt/luna/; # luna ��
}
location /koko/ {
proxy_pass http://koko; # koko
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 /guacamole/ {
proxy_pass http://guacamole/; # guacamole
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;
}
}
# �� http://192.168.100.100
# ����: admin ��: admin �����-���� �� koko Guacamole ������
# ����
$ ssh -p2222 admin@192.168.100.100
$ sftp -P2222 admin@192.168.100.100
��: admin
2.3. ����������� 35
Jumpserver Documentation, �� latest
(���)
$ ssh admin@192.168.100.100 2222
$ sftp admin@192.168.100.100 2222
��: admin
�����������
������� - mariadb ��
��
• # ��������
• $ �������������
• > ���������������
��
• ��: CentOS 7
• ��: MariaDB Galera Cluster
����
# �������������������
$ yum upgrade -y
# �� MariaDB �
$ vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://mirrors.ustc.edu.cn/mariadb/yum/10.1/centos7-amd64
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
# �� Firewalld � Selinux
$ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.
,→100.0/24" port protocol="tcp" port="3306" accept"
(����)
36 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
$ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.
,→100.0/24" port protocol="tcp" port="4567" accept"
$ firewall-cmd --reload
$ setenforce 0
$ sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# � 192.168.100.10 ��������
$ systemctl start mariadb
$ mysql_secure_installation # ���� root ��, �������� y
$ systemctl stop mariadb
# � 192.168.100.10 �������
$ vi /etc/my.cnf.d/server.cnf
...
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name=galera_cluster
wsrep_cluster_address="gcomm://192.168.100.10,192.168.100.11,192.168.100.12"
wsrep_node_name=Mariadb-01 # �������� hostname
wsrep_node_address=192.168.100.10 # �������� ip
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
...
# � 192.168.100.11 �������
$ vi /etc/my.cnf.d/server.cnf
...
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name=galera_cluster
wsrep_cluster_address="gcomm://192.168.100.10,192.168.100.11,192.168.100.12"
wsrep_node_name=Mariadb-02 # �������� hostname
wsrep_node_address=192.168.100.11 # �������� ip
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
...
# � 192.168.100.12 �������
(����)
2.3. ����������� 37
Jumpserver Documentation, �� latest
(���)
$ vi /etc/my.cnf.d/server.cnf
...
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name=galera_cluster
wsrep_cluster_address="gcomm://192.168.100.10,192.168.100.11,192.168.100.12"
wsrep_node_name=Mariadb-03 # �������� hostname
wsrep_node_address=192.168.100.12 # �������� ip
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# � 192.168.100.10 �������
$ sudo -u mysql /usr/sbin/mysqld --wsrep-new-cluster &> /tmp/wsrep_new_cluster.log &
$ disown $!
$ tail -f /tmp/wsrep_new_cluster.log # ���� ready for connections, ������
# ��������
$ ps -ef | grep mysqld | grep -v grep | awk '{print $2}' | xargs kill -9
$ systemctl start mariadb
# �� Jumpserver ������
$ mysql -uroot
> create database jumpserver default charset 'utf8';
> grant all on jumpserver.* to 'jumpserver'@'192.168.100.%' identified by 'weakPassword';
> flush privileges;
> quit
������� - redis ��
��
• # ��������
• $ �������������
38 Chapter 2. ����
Jumpserver Documentation, �� latest
��
• ��: CentOS 7
• IP: 192.168.100.20
����
# ����
$ yum upgrade -y
# �� redis ��
$ yum install -y install epel-release
$ yum install -y redis
$ firewall-cmd --reload
# �� redis ��
$ systemctl enable redis
# �� redis ����
$ vi /etc/redis.conf
...
...
# �� redis
$ systemctl start redis
������� - jumpserver ��
��
• # ��������
• $ �������������
2.3. ����������� 39
Jumpserver Documentation, �� latest
��
• ��: CentOS 7
• IP: 192.168.100.30
����
# ����
$ yum upgrade -y
# �����
$ yum -y install gcc epel-release git
$ firewall-cmd --reload
# �� Python3.6
$ yum -y install python36 python36-devel
# �� py3 ����
$ python3.6 -m venv /opt/py3
$ source /opt/py3/bin/activate
# �� Jumpserver
$ git clone --depth=1 https://github.com/jumpserver/jumpserver.git
# ���� RPM �
$ yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt)
# �� Python ���
$ pip install wheel
$ pip install --upgrade pip setuptools
$ pip install -r /opt/jumpserver/requirements/requirements.txt
# �� jumpserver ����
$ cd /opt/jumpserver
$ cp config_example.yml config.yml
40 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
$ echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc
$ BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16` # ����BOOTSTRAP_TOKEN
$ echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc
$ vi config.yml
# Development env open this, when error occur display the full process track, Production␣
,→disable it
# DEBUG �� ��DEBUG��������������
DEBUG: false
# ����
LOG_LEVEL: ERROR
# LOG_DIR:
# Session expiration setting, Default 24 hour, Also set expired on on browser close
# ���Session����, ��24��, �������������
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
# SQLite setting:
# �����sqlite���
# DB_ENGINE: sqlite3
# DB_NAME:
2.3. ����������� 41
Jumpserver Documentation, �� latest
(���)
# ��Mysql�����
DB_ENGINE: mysql
DB_HOST: 192.168.100.100
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: �������
DB_NAME: jumpserver
# OTP settings
# OTP/MFA ��
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver
# �� Jumpserver
$ cd /opt/jumpserver
$ ./jms start -d # ������ -d ��./jms start -d
# ����������, ����./jms start|stop|status all ������� -d ��
# �� Nginx ����
$ vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
42 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
# �� Nginx �����
$ rm -rf /etc/nginx/conf.d/default.conf
$ vi /etc/nginx/conf.d/jumpserver.conf
server {
listen 80;
location /media/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/; # ����, ��������, ������
}
location /static/ {
root /opt/jumpserver/data/; # ����, ��������, ������
}
location /ws/ {
proxy_pass http://localhost:8070;
proxy_http_version 1.1;
proxy_buffering off;
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 / {
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;
access_log off;
}
}
# �� Nginx
$ nginx -t # ��������, �������
$ systemctl start nginx
# �����, ����������
������� - koko ��
2.3. ����������� 43
Jumpserver Documentation, �� latest
��
• # ��������
• $ �������������
��
• ��: CentOS 7
• IP: 192.168.100.40
����
# ����
$ yum upgrade -y
$ firewall-cmd --reload
# �� docker
$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-
,→ce.repo
# �� docker ��
$ docker run --name jms_koko -d \
-p 2222:2222 \
-p 5000:5000 \
-e CORE_HOST=http://192.168.100.30:8080 \
-e BOOTSTRAP_TOKEN=��token \
wojiushixiaobai/jms_koko:1.5.6
# �� http://192.168.100.100/terminal/terminal/ �� koko ��
44 Chapter 2. ����
Jumpserver Documentation, �� latest
�����
$ firewall-cmd --reload
# �� http://192.168.100.100/terminal/terminal/ �� koko ��
������� - guacamole ��
��
• # ��������
• $ �������������
��
• ��: CentOS 7
• IP: 192.168.100.50
����
# ����
$ yum upgrade -y
$ firewall-cmd --reload
# �� docker
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-
,→ce.repo
(����)
2.3. ����������� 45
Jumpserver Documentation, �� latest
(���)
$ yum makecache fast
$ yum -y install docker-ce
$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.
,→daocloud.io
# �� docker ��
$ docker run --name jms_guacamole -d \
-p 8081:8080 \
-e JUMPSERVER_KEY_DIR=/config/guacamole/key \
-e JUMPSERVER_SERVER=http://192.168.100.30:8080 \
-e BOOTSTRAP_TOKEN=��token \
wojiushixiaobai/jms_guacamole:1.5.6
# �� http://192.168.100.100/terminal/terminal/ �� guacamole ��
�����
$ firewall-cmd --reload
$ docker run --name jms_guacamole1 -d \
-p 8082:8081 \
-e JUMPSERVER_KEY_DIR=/config/guacamole/key \
-e JUMPSERVER_SERVER=http://192.168.100.100 \
-e BOOTSTRAP_TOKEN=��token \
wojiushixiaobai/jms_guacamole:1.5.6
# �� http://192.168.100.100/terminal/terminal/ �� guacamole ��
2.4 ����
��������������������������
• ��������������
• ���� 0.x ����� 1.x ��
• ������ 1.0.x - 1.4.3 �������
• � 1.4.x ���� mysql �������� 5.6, mariadb �������� 5.5.56
• ��������������������������
0. ��������������
46 Chapter 2. ����
Jumpserver Documentation, �� latest
# ���������, ����������������
$ cd /opt/jumpserver/apps
$ for d in $(ls); do if [ -d $d ] && [ -d $d/migrations ]; then ll ${ d}/migrations/*.py␣
,→| grep -v __init__.py; fi; done
# �����������, ����������
��������� ������
1. �� Jumpserver
$ cp -r /opt/jumpserver /opt/jumpserver_bak
$ mysqldump -uroot -p jumpserver > /opt/jumpserver.sql
2. �� Jumpserver
$ cd /opt/jumpserver
$ source /opt/py3/bin/activate
$ ./jms stop
$ git fetch
$ git checkout 1.4.4
$ mv config.py config_old.bak
$ cp config_example.py config.py
$ vi config.py # � config_old.bak ���������������
"""
jumpserver.config
~~~~~~~~~~~~~~~~~
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
(����)
2.4. ���� 47
Jumpserver Documentation, �� latest
(���)
class Config:
# Use it to encrypt or decrypt data
# Django security setting, if your disable debug model, you should setting that
ALLOWED_HOSTS = ['*']
# ����SQLite3, ����������������
# DB_ENGINE = 'sqlite3'
# DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3')
# Django ���ip���
# ./manage.py runserver 127.0.0.1:8080
HTTP_BIND_HOST = '0.0.0.0'
HTTP_LISTEN_PORT = 8080
def __init__(self):
pass
48 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
class DevelopmentConfig(Config):
pass
class TestConfig(Config):
pass
class ProductionConfig(Config):
pass
# Default using Config settings, you can write if/else for different env
config = DevelopmentConfig()
# �� jumpserver
$ cd ../
$ ./jms start -d
server {
listen 80;
location /luna/ {
try_files $uri / /index.html;
alias /opt/luna/; # luna ��, ��������, ������
}
location /media/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/; # ����, ��������, ������
}
location /static/ {
(����)
2.4. ���� 49
Jumpserver Documentation, �� latest
(���)
root /opt/jumpserver/data/; # ����, ��������, ������
}
location /koko/ {
proxy_pass http://localhost:5000;
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 /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 /ws/ {
proxy_pass http://localhost:8070;
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 / {
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;
}
}
# ���������
$ nginx -s reload
50 Chapter 2. ����
Jumpserver Documentation, �� latest
��������������������������
• ������� 1.4.4 ��, ������� 1.4.4
• � 1.4.5 ����, ������� migrations
• ��������������������������
Jumpserver
$ cd /opt/jumpserver
$ source /opt/py3/bin/activate
$ ./jms stop
# �� Jumpserver
$ cp -r /opt/jumpserver /opt/jumpserver_1.4.4_bak
$ cd /opt/jumpserver
$ git fetch
$ git checkout master
$ git pull
$ git clean -df # �������, ���������������
$ git reset --hard # ������, ���������������
$ git pull
# Development env open this, when error occur display the full process track, Production␣
,→disable it
# DEBUG �� ��DEBUG��������������
DEBUG: false
# ����
LOG_LEVEL: ERROR
(����)
2.4. ���� 51
Jumpserver Documentation, �� latest
(���)
# LOG_DIR:
# Session expiration setting, Default 24 hour, Also set expired on on browser close
# ���Session����, ��24��, �������������
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
# SQLite setting:
# �����sqlite���
# DB_ENGINE: sqlite3
# DB_NAME:
# OTP settings
# OTP/MFA ��
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver
52 Chapter 2. ����
Jumpserver Documentation, �� latest
#!/bin/bash
#
ret=$?
$ sh 1.4.4_to_1.4.5_migrations.sh
$ cd ../
$ ./jms start -d
$ vi /etc/nginx/conf.d/jumpserver.conf # ����������/etc/nginx/nginx.conf
server {
listen 80;
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 /koko/ {
(����)
2.4. ���� 53
Jumpserver Documentation, �� latest
(���)
proxy_pass http://localhost:5000;
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 /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 /ws/ {
proxy_pass http://localhost:8070;
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 / {
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;
}
}
# ���������
$ nginx -s reload
Luna
��: ���� release �
$ cd /opt
$ rm -rf luna luna.tar.gz
(����)
54 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
$ wget https://github.com/jumpserver/luna/releases/download/1.5.6/luna.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/luna/1.5.6/luna.tar.gz
$ tar xf luna.tar.gz
$ chown -R root:root luna
# �����������
Koko
$ cd /opt
$ wget https://github.com/jumpserver/koko/releases/download/1.5.6/koko-master-linux-
,→amd64.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/koko/1.5.6/koko-master-linux-amd64.tar.gz
$ tar xf koko-master-linux-amd64.tar.gz
$ chown -R root:root kokodir
$ cd kokodir
$ cp config_example.yml config.yml
$ sed -i "s/BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN:
,→$BOOTSTRAP_TOKEN/g" /opt/kokodir/config.yml
,→wojiushixiaobai/jms_koko:<Tag>
,→koko:1.5.6
Guacamole
����� guacamole
$ /etc/init.d/guacd stop
$ sh /config/tomcat8/bin/shutdown.sh
$ cd /opt/docker-guacamole
$ git pull
(����)
2.4. ���� 55
Jumpserver Documentation, �� latest
(���)
$ cd /config
$ rm -rf /config/tomcat8
$ tar xf apache-tomcat-9.0.30.tar.gz
$ mv apache-tomcat-9.0.30 tomcat9
$ rm -rf /config/tomcat9/webapps/*
$ sed -i 's/Connector port="8080"/Connector port="8081"/g' /config/tomcat9/conf/server.
,→xml
$ wget https://github.com/ibuler/ssh-forward/releases/download/v0.0.5/linux-amd64.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/ssh-forward/v0.0.5/linux-amd64.tar.gz
$ /etc/init.d/guacd start
$ sh /config/tomcat9/bin/startup.sh
,→wojiushixiaobai/jms_guacamole:<Tag>
,→guacamole:1.5.6
56 Chapter 2. ����
Jumpserver Documentation, �� latest
��������������������������
• ��������������������������
Jumpserver
$ cd /opt/jumpserver
$ source /opt/py3/bin/activate
$ ./jms stop
$ cd /opt/jumpserver
$ git pull
# Development env open this, when error occur display the full process track, Production␣
,→disable it
# DEBUG �� ��DEBUG��������������
DEBUG: false
# ����
LOG_LEVEL: ERROR
# LOG_DIR:
# Session expiration setting, Default 24 hour, Also set expired on on browser close
# ���Session����, ��24��, �������������
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
# SQLite setting:
# �����sqlite���
# DB_ENGINE: sqlite3
# DB_NAME:
2.4. ���� 57
Jumpserver Documentation, �� latest
(���)
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: *****
DB_NAME: jumpserver
# OTP settings
# OTP/MFA ��
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver
$ vi /etc/nginx/conf.d/jumpserver.conf # ����������/etc/nginx/nginx.conf
server {
listen 80;
location /luna/ {
try_files $uri / /index.html;
alias /opt/luna/; # luna ��, ��������, ������
}
(����)
58 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
location /media/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/; # ����, ��������, ������
}
location /static/ {
root /opt/jumpserver/data/; # ����, ��������, ������
}
location /koko/ {
proxy_pass http://localhost:5000;
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 /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 /ws/ {
proxy_pass http://localhost:8070;
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 / {
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;
}
}
2.4. ���� 59
Jumpserver Documentation, �� latest
# ���������
$ nginx -s reload
Luna
��: ���� release �
$ cd /opt
$ rm -rf luna luna.tar.gz
$ wget https://github.com/jumpserver/luna/releases/download/1.5.6/luna.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/luna/1.5.6/luna.tar.gz
$ tar xf luna.tar.gz
$ chown -R root:root luna
# �����������
Koko
$ cd /opt
$ wget https://github.com/jumpserver/koko/releases/download/1.5.6/koko-master-linux-
,→amd64.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/koko/1.5.6/koko-master-linux-amd64.tar.gz
$ tar xf koko-master-linux-amd64.tar.gz
$ chown -R root:root kokodir
$ cd kokodir
$ cp config_example.yml config.yml
$ sed -i "s/BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN:
,→$BOOTSTRAP_TOKEN/g" /opt/kokodir/config.yml
,→wojiushixiaobai/jms_koko:<Tag>
,→koko:1.5.6
Guacamole
60 Chapter 2. ����
Jumpserver Documentation, �� latest
����� guacamole
$ /etc/init.d/guacd stop
$ sh /config/tomcat8/bin/shutdown.sh
$ cd /opt/docker-guacamole
$ git pull
$ cd /config
$ rm -rf /config/tomcat8
$ tar xf apache-tomcat-9.0.30.tar.gz
$ mv apache-tomcat-9.0.30 tomcat9
$ rm -rf /config/tomcat9/webapps/*
$ sed -i 's/Connector port="8080"/Connector port="8081"/g' /config/tomcat9/conf/server.
,→xml
$ wget https://github.com/ibuler/ssh-forward/releases/download/v0.0.5/linux-amd64.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/ssh-forward/v0.0.5/linux-amd64.tar.gz
$ /etc/init.d/guacd start
$ sh /config/tomcat9/bin/startup.sh
,→wojiushixiaobai/jms_guacamole:1.5.6
,→guacamole:1.5.6
2.4. ���� 61
Jumpserver Documentation, �� latest
Jumpserver
$ cd /opt/jumpserver
$ source /opt/py3/bin/activate
$ ./jms stop
$ git checkout master
$ git pull
$ pip install wheel
$ pip install -r requirements/requirements.txt
$ ./jms start -d
$ vi /etc/nginx/conf.d/jumpserver.conf # ����������/etc/nginx/nginx.conf
server {
listen 80;
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 /koko/ {
proxy_pass http://localhost:5000;
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 /guacamole/ {
proxy_pass http://localhost:8081/;
proxy_buffering off;
(����)
62 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
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 /ws/ {
proxy_pass http://localhost:8070;
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 / {
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;
}
}
# ���������
$ nginx -s reload
Luna
��: ���� release �
$ cd /opt
$ rm -rf luna luna.tar.gz
$ wget https://github.com/jumpserver/luna/releases/download/1.5.6/luna.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/luna/1.5.6/luna.tar.gz
$ tar xf luna.tar.gz
$ chown -R root:root luna
# �����������
Koko
$ cd /opt
$ wget https://github.com/jumpserver/koko/releases/download/1.5.6/koko-master-linux-
,→amd64.tar.gz
(����)
2.4. ���� 63
Jumpserver Documentation, �� latest
(���)
# �����������������������
$ wget https://demo.jumpserver.org/download/koko/1.5.6/koko-master-linux-amd64.tar.gz
$ tar xf koko-master-linux-amd64.tar.gz
$ chown -R root:root kokodir
$ cd kokodir
$ cp config_example.yml config.yml
$ sed -i "s/BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN:
,→$BOOTSTRAP_TOKEN/g" /opt/kokodir/config.yml
,→wojiushixiaobai/jms_koko:<Tag>
,→koko:1.5.6
Guacamole
����� guacamole
$ /etc/init.d/guacd stop
$ sh /config/tomcat8/bin/shutdown.sh
$ cd /opt/docker-guacamole
$ git pull
$ cd /config
$ rm -rf /config/tomcat8
$ tar xf apache-tomcat-9.0.30.tar.gz
$ mv apache-tomcat-9.0.30 tomcat9
$ rm -rf /config/tomcat9/webapps/*
$ sed -i 's/Connector port="8080"/Connector port="8081"/g' /config/tomcat9/conf/server.
,→xml
64 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
$ ln -sf /opt/docker-guacamole/root/app/guacamole/guacamole.properties /config/guacamole/
,→guacamole.properties
$ wget https://github.com/ibuler/ssh-forward/releases/download/v0.0.5/linux-amd64.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/ssh-forward/v0.0.5/linux-amd64.tar.gz
$ /etc/init.d/guacd start
$ sh /config/tomcat9/bin/startup.sh
,→wojiushixiaobai/jms_guacamole:1.5.6
,→guacamole:1.5.6
Jumpserver
$ cd /opt/jumpserver
$ source /opt/py3/bin/activate
$ ./jms stop
$ git pull
$ pip install wheel
$ pip install -r requirements/requirements.txt
$ ./jms start -d
$ vi /etc/nginx/conf.d/jumpserver.conf # ����������/etc/nginx/nginx.conf
server {
(����)
2.4. ���� 65
Jumpserver Documentation, �� latest
(���)
listen 80;
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 /ws/ {
proxy_pass http://localhost:8070;
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 /koko/ {
proxy_pass http://localhost:5000;
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 /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;
(����)
66 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
}
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;
}
}
# ���������
$ nginx -s reload
Luna
��: ���� release �
$ cd /opt
$ rm -rf luna luna.tar.gz
$ wget https://github.com/jumpserver/luna/releases/download/1.5.6/luna.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/luna/1.5.6/luna.tar.gz
$ tar xf luna.tar.gz
$ chown -R root:root luna
# �����������
Koko
$ cd /opt
$ wget https://github.com/jumpserver/koko/releases/download/1.5.6/koko-master-linux-
,→amd64.tar.gz
# �����������������������
$ wget https://demo.jumpserver.org/download/koko/1.5.6/koko-master-linux-amd64.tar.gz
$ tar xf koko-master-linux-amd64.tar.gz
$ chown -R root:root kokodir
$ cd kokodir
$ cp config_example.yml config.yml
$ sed -i "s/BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN:
,→$BOOTSTRAP_TOKEN/g" /opt/kokodir/config.yml
2.4. ���� 67
Jumpserver Documentation, �� latest
(���)
$ docker rm jms_koko
$ docker pull wojiushixiaobai/jms_koko:1.5.6
$ docker run --name jms_koko -d -p 2222:2222 -p 5000:5000 -e CORE_HOST=http://
,→<Jumpserver_url> -e BOOTSTRAP_TOKEN=<Jumpserver_BOOTSTRAP_TOKEN> --restart=always␣
,→wojiushixiaobai/jms_koko:<Tag>
,→koko:1.5.6
Guacamole
����� guacamole
$ /etc/init.d/guacd stop
$ sh /config/tomcat8/bin/shutdown.sh
$ cd /opt/docker-guacamole
$ git pull
$ cd /config
$ rm -rf /config/tomcat8
$ tar xf apache-tomcat-9.0.30.tar.gz
$ mv apache-tomcat-9.0.30 tomcat9
$ rm -rf /config/tomcat9/webapps/*
$ sed -i 's/Connector port="8080"/Connector port="8081"/g' /config/tomcat9/conf/server.
,→xml
$ /etc/init.d/guacd start
$ sh /config/tomcat9/bin/startup.sh
,→wojiushixiaobai/jms_guacamole:<Tag>
(����)
68 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
# �: docker run --name jms_guacamole -d -p 8081:8080 -e JUMPSERVER_SERVER=http://192.168.
,→244.144:8080 -e BOOTSTRAP_TOKEN=abcdefg1234 --restart=always wojiushixiaobai/jms_
,→guacamole:1.5.6
2.5 ����
� Jumpserver ������, ����� ”���” � ”jumpserver��” �� ��1.4.5 ��������, ����� ”���” ”����” � ”����”
1. ����������
# �� jumpserver ���������
$ mysqldump -uroot -p jumpserver > /opt/jumpserver.sql
# � jumpserver.sql �������� /opt ��
# �� Jumpserve �������� /opt ��
$ mysql -uroot
> create database jumpserver default charset 'utf8';
> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'weakPassword';
> use jumpserver;
> source /opt/jumpserver.sql;
> quit
$ cd /opt
$ python3.6 -m venv py3
$ source /opt/py3/bin/activate
$ cd /opt/jumpserver/requirements
$ yum -y install $(cat rpm_requirements.txt)
$ pip install wheel
$ pip install --upgrade pip setuptools
$ pip install -r requirements.txt
3. ������
$ cd /opt/jumpserver
$ vi config.yml
# ����� redis �������, ���������, �� ��� � redis ���
2.5. ���� 69
Jumpserver Documentation, �� latest
4. �� jumpserver
$ ./jms start
5. ����������������
2.6 ����
# �� docker ��
$ docker rm jms_koko
$ docker rm jms_guacamole
$ docker rmi wojiushixiaobai/jms_koko:1.5.6 # ������
$ docker rmi wojiushixiaobai/jms_guacamole:1.5.6 # ������
# ������
$ rm -rf /usr/lib/systemd/system/jms.service
$ rm -rf /opt/start_jms.sh
$ rm -rf /opt/stop_jms.sh
# �����
$ mysql -uroot
> drop database jumpserver;
> exit
# �� redis
$ redis-cli -h 127.0.0.1
> flushall
> exit
$ reboot # �����
����
70 Chapter 2. ����
Jumpserver Documentation, �� latest
• ��������������, ����������������
1. �� python3.6 mysql Redis
# ��������������, �������������
2. �� py3 ����
3. �� py3 ����
4. �� jumpserver ��
$ cd /opt
$ git clone --depth=1 https://github.com/jumpserver/jumpserver.git
# ������ git ����
# �������� https://demo.jumpserver.org/download/jumpserver/ ��
5. ����
$ cd /opt/jumpserver/requirements
# ������, �����������
# � Centos: yum install -y $(cat rpm_requirements.txt)
# � Ubuntu: apt-get install -y $(cat deb_requirements.txt)
6. ������
$ cd /opt/jumpserver
$ cp config_example.yml config.yml
$ vim config.yml
# �� SECRET_KEY � BOOTSTRAP_TOKEN ����������
7. �� jumpserver
$ cd /opt/jumpserver
$ ./jms start # �� -d ������� ./jms start -d
# ������ py3 ����, ����������� FAQ ���� ���� ��
8. ���� koko ��
$ cd /opt
# �� https://github.com/jumpserver/koko/releases ���� release ����� /opt��
(����)
2.6. ���� 71
Jumpserver Documentation, �� latest
(���)
$ wget https://github.com/jumpserver/koko/releases/download/1.5.6/koko-master-linux-
,→amd64.tar.gz
$ tar xf koko-master-linux-amd64.tar.gz
$ cp config_example.yml config.yml
$ vim config.yml
# BOOTSTRAP_TOKEN ��� jumpserver/config.yml ����, ����
$ ./koko # �� -d ������� ./koko -d
,→wojiushixiaobai/jms_koko:<Tag>
,→wojiushixiaobai/jms_koko:1.5.6
9. ������� guacamole ��
$ cd /opt
$ git clone --depth=1 https://github.com/jumpserver/docker-guacamole.git
$ cd /opt/docker-guacamole
$ tar xf guacamole-server-1.0.0.tar.gz
$ cd /opt/docker-guacamole/guacamole-server-1.0.0
# �� http://guacamole.apache.org/doc/gug/installing-guacamole.html ����������
,→libvorbis-dev libwebp-dev
# ln -s /usr/local/lib/freerdp /usr/lib/x86_64-linux-gnu/freerdp
,→libvorbis-dev libwebp-dev
# ln -s /usr/local/lib/freerdp /usr/lib/x86_64-linux-gnu/freerdp
(����)
72 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
# yum -y localinstall --nogpgcheck https://mirrors.aliyun.com/rpmfusion/free/el/
,→rpmfusion-free-release-7.noarch.rpm https://mirrors.aliyun.com/rpmfusion/nonfree/el/
,→rpmfusion-nonfree-release-7.noarch.rpm
,→devel libwebp-devel
# ln -s /usr/local/lib/freerdp /usr/lib64/freerdp
$ autoreconf -fi
$ ./configure --with-init-dir=/etc/init.d
$ make
$ make install
$ tar xf apache-tomcat-9.0.30.tar.gz
$ mv apache-tomcat-9.0.30 tomcat9
$ rm -rf /config/tomcat9/webapps/*
$ sed -i 's/Connector port="8080"/Connector port="8081"/g' /config/tomcat9/conf/server.
,→xml
$ wget https://github.com/ibuler/ssh-forward/releases/download/v0.0.5/linux-amd64.tar.gz
$ tar xf linux-amd64.tar.gz -C /bin/
$ chmod +x /bin/ssh-forward
# �� guacamole ��
$ export JUMPSERVER_SERVER=http://127.0.0.1:8080 # http://127.0.0.1:8080 � jumpserver ����
$ echo "export JUMPSERVER_SERVER=http://127.0.0.1:8080" >> ~/.bashrc
2.6. ���� 73
Jumpserver Documentation, �� latest
(���)
$ export GUACAMOLE_LOG_LEVEL=ERROR
$ echo "export GUACAMOLE_LOG_LEVEL=ERROR" >> ~/.bashrc
$ export JUMPSERVER_ENABLE_DRIVE=true
$ echo "export JUMPSERVER_ENABLE_DRIVE=true" >> ~/.bashrc
$ /etc/init.d/guacd start
$ sh /config/tomcat9/bin/startup.sh
,→guacamole:<Tag>
,→guacamole:1.5.6
10. �� luna ��
$ cd /opt
# �� https://github.com/jumpserver/luna/releases ��
$ wget https://github.com/jumpserver/luna/releases/download/1.5.6/luna.tar.gz
$ tar xf luna.tar.gz
$ chown -R root:root luna
$ rm -rf /etc/nginx/conf.d/default.conf
$ vim /etc/nginx/conf.d/jumpserver.conf
server {
listen 80;
location /luna/ {
try_files $uri / /index.html;
alias /opt/luna/; # luna ��, ��������, ������
}
location /media/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/; # ����, ��������, ������
}
location /static/ {
(����)
74 Chapter 2. ����
Jumpserver Documentation, �� latest
(���)
root /opt/jumpserver/data/; # ����, ��������, ������
}
location /koko/ {
proxy_pass http://localhost:5000;
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 /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 /ws/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8070;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
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;
}
}
$ nginx -t
$ nginx -s reload
2.6. ���� 75
Jumpserver Documentation, �� latest
# ������������
# �������, �� jumpserver ��� nginx ��� 80 ��, ����8080����
# ����: admin ��: admin
76 Chapter 2. ����
CHAPTER 3
����
����������
3.1 ����
3.1.1 ��
3.1.2 ������
1.1 ����
77
Jumpserver Documentation, �� latest
1.2 ����
# �������"����", ��������
# ���� 25 ��, ��� SSL � TLS; ������ SSL, ������� 465; ������ TLS, ������ 587
# ������� SSL � TLS
# �������, �����"����"��, ������, Jumpserver ������������ SMTP ������, �����������������
78 Chapter 3. ����
Jumpserver Documentation, �� latest
1.3 LDAP��
3.1. ���� 79
Jumpserver Documentation, �� latest
�� LDAP ����
1.4 ����
80 Chapter 3. ����
Jumpserver Documentation, �� latest
3.1. ���� 81
Jumpserver Documentation, �� latest
1.5 ����
82 Chapter 3. ����
Jumpserver Documentation, �� latest
3.1.3 ������
2.1 �� Jumpserver ��
# ������"����"����"����", ��������
# �������"����"��, ��������, (������������������)
# ��, ���� Jumpserver ����(�����, ����)�������������(���)
# ���������, Jumpserver �������"����"������������
# ������������, ������, ������������ Jumpserver ��
# ������ Jumpserver, ����������, ���������
��MFA � Google Authenticator, �������APP����������
3.1. ���� 83
Jumpserver Documentation, �� latest
3.1.4 ������
3.1 �����
84 Chapter 3. ����
Jumpserver Documentation, �� latest
3.2 ������
3.1. ���� 85
Jumpserver Documentation, �� latest
3.3 ������
# ���������������������, �����������
# �����������������, ������������"����"
86 Chapter 3. ����
Jumpserver Documentation, �� latest
3.4 ������
3.1. ���� 87
Jumpserver Documentation, �� latest
# "����"������"�����"������������"��"
# �"��"����"����"������������� ����������������������������
# ������������������ "��" ��������� �������� "��" ���������� ����������������������������
88 Chapter 3. ����
Jumpserver Documentation, �� latest
3.5 ������
# "��"�����������������������, ����������������
# �������"����"��, ��������
# ��������"����"��, ��������, ���������������
�������
3.1. ���� 89
Jumpserver Documentation, �� latest
# ��"��"���, ��"����"���
# �����"��"��, �������"����"��, ��������, ������
# IP�������������IP��(��������������IP��, ���jumpserer�����IP��)
��������������������������� ssh �������
90 Chapter 3. ����
Jumpserver Documentation, �� latest
�: �������"����", ������������������"��"�������
�: "Windows��"����"ssh��"
3.6 ����
# �������"����"����"����"��, ������������
# ��������"����"��, ��������, �������
# IP ������������, �����������������"��"������ IP ����
# ����������������� IP �������, ���, Jumpserver �������� IP ���
3.1. ���� 91
Jumpserver Documentation, �� latest
3.1.5 ��������
4.1 �������
92 Chapter 3. ����
Jumpserver Documentation, �� latest
3.1.6 ������
5.1 �� Jumpserver
3.1. ���� 93
Jumpserver Documentation, �� latest
5.2 ����
94 Chapter 3. ����
Jumpserver Documentation, �� latest
5.3 ����
5.4 ����
# �� "����"
# ��������, ���������� SSH ����
# ����� sftp ��������
3.1. ���� 95
Jumpserver Documentation, �� latest
3.2 ����
3.2.1 ������
1.1 ����
������”����”����”����”, ���������
96 Chapter 3. ����
Jumpserver Documentation, �� latest
3.2. ���� 97
Jumpserver Documentation, �� latest
3.2.2 �����
2.1 �����
���, ����, ��������������, ����������, ��������������, ���������������
������”����”����”���”, ����������
�������”�����”��, ����������
��������, ��������������������������������������, ��������������
98 Chapter 3. ����
Jumpserver Documentation, �� latest
3.3 ����
3.3.1 ������
1.1 �����
���������, �����������������, �����������
3.3. ���� 99
Jumpserver Documentation, �� latest
1.2 ����������
�������, ��������������, �����������
3.3.2 ������
�������������������������������������������������
2.1 ����
2.2 ����
�������, ���������
2.3 ����
2.4 ����
�������, ���������������, ������, ����������� ssh �����
3.3.3 ������
����������������root���� NOPASSWD: ALL sudo������ Jumpserver������ ��������������� ��Windows ��� administrators ������
3.1 ������
3.2 ������
3.3.4 ������
4.2 ������
3.3.5 ������
5.1 ����
5.2 ����
�������”����”��, ���������
3.3.6 ������
6.2 �������
�������������������
6.3 ���������
�������������������������
6.4 ����
�������������������������, ������
3.4 ����
3.4.1 ������
1.2 ������
��, ������, ������������
���, ������, �������������
����, ������������������������������
��, ���, �����������, ����� Linux�Windows �������, ����� Linux ��� Windows ���������
����������������, ��������������� (���������������, �������, ��������������������������)
3.5 ����
3.5.1 ������
1.1 ������
������”����”����”����”��, ����������, ������7�����
����������
�����������
����������������������
���������� IP ���
��: �����������
����: ������
��������
3.5.2 ������
2.1 ������
����������������, �������� IP ������
2.2 �������
Jumpserver �����������������”��”��, �������
3.5.3 ������
3.5.4 ��Web ��
3.5.5 ������
3.5.6 ������
��������� Jumpserver ����������, ���koko�Gua ���������, ���� Jumpserver ������, � Jumpserver ������������������
3.6 ����
3.6.1 ������
������������������������������������
3.6.2 ������
3.7 ����
������
��FTP��
������
������
������
3.8 ����
3.8.1 ������
������� ”����” ��, ��������, ������ URL����� URL�Email �������, ��”��”��, �������
3.8.2 ������
3.8.3 ��LDAP ��
�������” LDAP ��” ��, �� LDAP ����, �� LDAP ���DN��� OU�������LDAP ��������� SSL����� LDAP �����, ��”����”��, ��������,
��”��”��, �� LDAP ���
# extended LDIF
#
# LDAPv3
# base <ou=People,dc=xxx,dc=com> with scope subtree
# filter: (cn=*)
# requesting: ALL
#
(���)
objectClass: shadowAccount
...
3.8.4 ������
������
������� ”����” ��, ��������
����
4.1 ����
���������������, �������������������
129
Jumpserver Documentation, �� latest
4.2 ����
4.3 ����
�����������, �����������������
4.4 Web��
�� web ����
4.5 ����
��������, �������������� ( �� /tmp ), ����������, ����� ssh ��� ���� ������� ����
• Windows �������������� Windows ��, ������ ��� - G�, ������� G ���������, ����������� Ctrl + alt + shift
����
5.1.1 ��
5.1.2 ��
https://example.org/api/
5.1.3 ��
https://example.com/api/:app:/:version:/:resource:
https://example.com/api/assets/v1.0/assets [GET, POST]
https://example.com/api/assets/v1.0/assets/1 [GET, PUT, DELETE]
135
Jumpserver Documentation, �� latest
5.1.4 ��
https://example.com/api/:app:/:version:/:resource:
��������(CRUD)API, ���� HTTP Method �� URL �����, URL ������(�������), �������API������������ ID, ������������, GET �����
URL Parameter(���”?client_id=xxxxx&app_id=xxxxxx”), PUT/POST/DELETE �������������
5.1.6 ����
������
?keyword=localhost ����
?limit=10����������
?offset=10�������������
?page=2&per_page=100������, ���������
?sort=name&order=asc���������������, �������
?asset_id=1�������
5.1.7 ���
�����������������, ��������(������������HTTP��)�
• 200 OK - [GET]���������������, �������(Idempotent)�
• 201 CREATED - [POST/PUT/PATCH]�������������
• 202 Accepted - [*]���������������(����)
• 204 NO CONTENT - [DELETE]����������
• 400 INVALID REQUEST - [POST/PUT/PATCH]�����������, �����������������, ��������
• 401 Unauthorized - [*]���������(�����������)�
• 403 Forbidden - [*] ��������(�401����), ����������
5.1.8 ����
{
error: "Invalid API key"
}
5.1.9 ����
������, ��������������������
GET /collection����������(��)
GET /collection/resource���������
POST /collection�����������
PUT /collection/resource����������
PATCH /collection/resource����������
DELETE /collection/resource��������
RESTful API ���� Hypermedia, ����������, ���� API ��, ��������, ������������ ��, ���� api.example.com ��������, ����������
{"link": {
"rel": "collection https://www.example.com/zoos",
"href": "https://api.example.com/zoos",
"title": "List of zoos",
"type": "application/vnd.yourformat+json"
}}
5.1.11 ��
5.2.1 ����
1. Python 3.6.1
2. Django 2.1
3. Flask 1.0.2 Luna
4. Paramiko 2.4.1 Coco
5.2.2 Django ��
5.2.3 ����
�������
��
�����
� PEP8 ��, Python ������79���, �� Django ���, URL ������, ��21�������, ��������120��
�����HTML ����������
�����
�������”()”����”{}”������, ����������������
������������, ����”[”�”(”�������
items = [
'this is the first', 'set of items', 'with more items',
'to come in this line', 'like this'
]
��
�����������, ��������������������������������
def hello(name):
print 'Hello %s!' % name
def goodbye(name):
print 'See you %s.' % name
class MyClass(object):
"""This is a simple docstring."""
def get_annoying_name(self):
return self.name.upper() + '!!!!111'
������
������
exp = -1.05
value = (item_value / item_count) * offset / exp
value = my_list[index]
value = my_dict['key']
��
1. ���������, ��”==”�”!=”�
2. ���(singletons)�����, �� is � is not�
3. �����True�False����(��, ������foo == False, �������not foo)�
��������
����
���������
1. ����cls �������
2. �����self �������
3. property���������(lambdas)�, ������������� x ��, ���display_name = property(lambda x: x.real_name or
x.username)�
��������� reStructuredText ����, �� Sphinx �������������, ������� ������, ������������������������������ �����, ��������������������������,
��������������������� (���������, ���������)
def foo():
"""This is a simple docstring."""
def bar():
"""This is a longer docstring with so much information in there
that it spans three lines. In this case, the closing triple quote
is on its own line.
"""
������������(����)������������, �������������
����
��(Comment)
class User(object):
#: the name of the user as unicode string
name = Column(String)
#: the sha1 hash of the password + inline salt
pw_hash = Column(String)
5.3 ����
����(����)�
.
��� config-example.py // ������
��� docs // �� DOC �������
� ��� README.md
��� LICENSE
��� README.md
��� install // ����
��� logs // ����
(����)
(���)
��� apps // ������, ��� APP ����
� ��� assets // APP ��
� � ��� admin.py
� � ��� apps.py // ��� Django APP ����
� � ��� api.py // API ��
� � ��� __init__.py // �������, ������, ���� APP ��
� � ��� migrations // Models Migrations ������
� � � ��� __init__.py
� � ��� models.py // ������
� � ��� static // APP �������, ����
� � � ��� assets // �����, ������
� � � ��� some_image.png
� � ��� templates // APP �����
� � � ��� assets // �����, ������
� � � ��� asset_list.html
� � ��� templatetags // ������
� � ��� tests.py // ������
� � ��� urls.py // Urlconf ��
� � ��� utils.py // � Views � API ����������, API � Views ���������
� � ��� views.py // Views ��
� ��� common
� � ��� templatetags // �� Template Tag
� � ��� utils.py // �������
� � ��� views.py
� ��� fixtures // �������
� � ��� init.json // ��������
� � ��� fake.json // ��������
� ��� jumpserver // ������
� � ��� __init__.py
� � ��� settings.py // ������
� � ��� urls.py // ���� Urlconf
� � ��� wsgi.py
� ��� manage.py
� ��� static // ��������
� ��� i18n // �������
� ��� templates // ������
5.4 API ��
5.4.1 Session
5.4.2 Token
�������� Api��token������MFA��������
��Private token������������������������������
$ source /opt/py3/bin/activate
$ cd /opt/jumpserver/apps
$ python manage.py shell
>>> from users.models import User
>>> u = User.objects.get(username='admin')
>>> u.create_private_token()
937b38011acf499eb474e2fecb424ab3
import requests
from httpsig.requests_auth import HTTPSignatureAuth
KEY_ID = 'su-key'
SECRET = 'my secret string'
5.4.5 ����
import requests
import json
from pprint import pprint
def get_token():
url = 'https://demo.jumpserver.org/api/v1/authentication/auth/'
query_args = {
"username": "admin",
"password": "admin"
}
return json.loads(response.text)['token']
def get_user_info():
url = 'https://demo.jumpserver.org/api/v1/users/users/'
token = get_token()
pprint(json.loads(response.text))
get_user_info()
5.5 API ��
http://HOST:PORT/api/{VERSION}/{APP}/{RESOURCE}/ http://HOST:PORT/
api/{VERSION}/{APP}/{RESOURCE}/{RESOURCEID}/
�:
• ����
http://localhost/api/v1/assets/assets/
• ����
http://localhost/api/v1/assets/assets/2c56fd37-db65-40ed-b787-b65a98635f12/
5.5.2 Api ��
$ vi jumpserver/config.yml
...
DEBUG: true
���
147
Jumpserver Documentation, �� latest
����
7.1 ����
�������:
7.2 QQ �
7.3 Github
https://github.com/jumpserver/jumpserver.git
7.4 ��
http://www.jumpserver.org
7.5 Demo
https://demo.jumpserver.org
149
Jumpserver Documentation, �� latest
7.6 ��
support@fit2cloud.com
Snapshot ��
8.1 ���
151
Jumpserver Documentation, �� latest
8.2 ����
8.3 ����
8.4 Linux ��
8.5 Windows ��
FAQ
# �������, ���������
# ���������� Google Authenticator, ������������������
# ����������� (� Microsoft Authenticator ���� �)
MFA������
# �����������MFA, ������������������.
# �����������, ����� users_user ������ mfa_level � 0, ��������
$ mysql -uroot
> use jumpserver;
> update users_user set mfa_level='0' where username='admin'; # admin ��������
155
Jumpserver Documentation, �� latest
��DN cn=administrator,cn=Users,dc=jumpserver,dc=org
# ������������, jumpserver����������ldap�������
�� # ���������
��OU ou=jumpserver,dc=jumpserver,dc=org
# ���������jumpserver�����, �������ou������jumpserver
# �OU�� ou=jumpserver,dc=jumpserver,dc=org | ou=user,dc=jumpserver,dc=org | ou=xxx,
,→dc=jumpserver,dc=org
����� (cn=%(user)s)
# �������ldap�������, ��������
��SSL
# ��� LDAP�� ����� ldaps://serverurl:636
��LDAP��
# ������ LDAP���� �� jumpserver,���
2. ��
1. ������
$ docker images
2. ���������
$ docker ps -a
3. ���������
$ docker ps
4. ���������
# �:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS ␣
,→PORTS NAMES
ecda634206af jumpserver/guacamole:test "/init" 12 days ago Up 3 days 0.0.
,→0.0:8081->8080/tcp jms_guacamole
$ docker exec -it ecda634206af /bin/bash � docker exec -it jms_guacamole /bin/bash
# ���� /bin/bash ���� /bin/sh �: docker exec -it jms_koko /bin/sh
5. �� �� �� ��
# �:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS ␣
,→PORTS NAMES
ecda634206af jumpserver/guacamole:test "/init" 12 days ago Up 3 days 0.0.
,→0.0:8081->8080/tcp jms_guacamole
6. ���� log
# �:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS ␣
,→PORTS NAMES
ecda634206af jumpserver/guacamole:test "/init" 12 days ago Up 3 days 0.0.
,→0.0:8081->8080/tcp jms_guacamole
7. ����
# �:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS ␣
,→PORTS NAMES
ecda634206af jumpserver/guacamole:test "/init" 12 days ago Up 3 days 0.0.
,→0.0:8081->8080/tcp jms_guacamole
8. ����
$ docker rmi <��� CONTAINER ID>
# �:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jumpserver/guacamole test e0c2ec53a8fd 13 days ago 1.23GB
9. ����
$ docker pull <����:��>
# �:
$ docker pull wojiushixiaobai/jms_all:latest
$ docker pull wojiushixiaobai/jms_koko:1.5.6
$ docker pull wojiushixiaobai/jms_guacamole:1.5.6
# ���������
AUTH_RADIUS: True
RADIUS_SERVER: 127.0.0.1
RADIUS_PORT: 1812
RADIUS_SECRET: radius_secret
# �������, �� jumpserver ��
2. ������
# RADIUS_SERVER: 127.0.0.1 � Radius ����IP��
# RADIUS_PORT: 1812 � Radius ������
# RADIUS_SECRET: radius_secret � Radius ���������
(����)
(���)
# freeradius � SECRET � clients.conf ��
# ��� SECRET ��� web ��� RADIUS Authentication Settings ��� Shared Secret ��
# ��� SECRET ��� web ��� Authentication Options ��� Shared Secret ��
# ������������������
# ����
AUTH_RADIUS: True
RADIUS_SERVER: 47.98.186.18
RADIUS_PORT: 1812
RADIUS_SECRET: testing123
• Jms_core �� https://github.com/jumpserver/jumpserver ��
• Jms_core ������ /opt/jumpserver
��������������� ��������
1. Jms_core ����������
# �� redis �������������
# �� ��� �������������
- �� xxxx is running: 0
$ ./jms stop
$ rm -rf tmp/*.pid
$ ps aux | grep python3 # ����������, �����, �� kill �
$ ./jms start -d
- config.yml ����
# ������������: �������, ����, ����
# SECRET_KEY: 5RLbBjm8AkMSvnft... # ����: �����, ������
# BOOTSTRAP_TOKEN: ihR4WG4gRShCnpQL... # ����: �����, ������
# DB_PASSWORD: '123456' # ������������
# DB_PASSWORD: cPzxaiUAtA5IkdT2... # �����������
# REDIS_PASSWORD: '888888' # ������������
# REDIS_PASSWORD: Ma5bzA3gVK5oY17l... # �����������
2. Web ������
# �����, ���� 8080 ���� Web ��, ��� nginx �������, �� 80 ����
# ��� IE ���
3. Web ����
# ������������ admin
# �����������������������, ��������
- �������������
$ python manage.py createsuperuser --username=user --email=user@domain.com
- ������
$ source /opt/py3/bin/activate
$ cd /opt/jumpserver/utils
$ sh unblock_all_user.sh
# ����� unblock_all_user.sh ��
$ source /opt/py3/bin/activate
$ cd /opt/jumpserver/apps
$ python manage.py shell
>>> from django.core.cache import cache
>>> cache.delete_pattern('_LOGIN_BLOCK_*')
>>> cache.delete_pattern('_LOGIN_LIMIT_*')
>>> exit()
- ���� � jumpserver �������, ���������������, ���������, linux �� NOPASSWD: ALL ���, Windows ��␣
,→Administrators ����, telnet ��� vnc ����������
(����)
(���)
# ����� �� ���� � ���� ��
- �������������������� ...........
$ ./jms stop
$ ps aux | grep python3 # ���������� kill �
$ ./jms start -d
- ��������������
# ����������, �������������, ��������
- ������ timeout
.. code-block:: vim
# ��� ���� �������� ok, �� web ������ timeout, ���������� /etc/ssh/sshd_config � usedns � no
$ vim /etc/ssh/sshd_config
...
# UseDNS no
UseDNS no
...
...
# REUSE_CONNECTION: true
REUSE_CONNECTION: false
...
5. Telnet ����
- telnet ���
# ��� Web "����"-"����" ��������
# � �� "tenlet" ���� telnet�� "��" ������
(����)
(���)
- ��
$ telnet 172.16.0.1
Login authentication
login: admin
password: *********
Info: The max number or VTY users is 10, and the number
of current VTY users on line is 1.
<RA-L7-RD>
# �������������, ��1�|��2�|��3�|��4�|success|��
# RW-1F-1|RW-2F-1|RW-3F-1|success|��
# <RA-L7-RD>|<RA-L6-RD>|<RA-L5-RD>|success|��
# <.*>|.*>|success|��
• Jms_koko �� https://github.com/jumpserver/koko ��
• Jms_koko ������ /opt/koko �� /opt/kokodir
1. Jms_koko ����������� Web �������
- �� [ERRO] POST http://127.0.0.1:8080/api/v2/terminal/terminal-registrations/ failed,␣
,→get code: 403, {"detail":"����������"}
# ���������� koko
$ docker stop jms_koko
$ docker rm jms_koko
$ Server_IP=`ip addr | grep 'state UP' -A2 | grep inet | egrep -v '(127.0.0.
,→1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1`
,→jms_koko:1.5.6
# �������� koko
$ rm /opt/kokodir/keys/*
$ vi /opt/kokodir/config.yml
(����)
(���)
...
...
$ ./koko
...
...
$ ./koko
3. �� sftp �����
$ vi /opt/kokodir/config.yml
# SFTP��������
# SFTP_SHOW_HIDDEN_FILE: false
$ vi config.yml
(����)
(���)
# SFTP����, �� /tmp, Home�������
# SFTP_ROOT: /tmp
SFTP_ROOT: /
# SFTP��������
# SFTP_SHOW_HIDDEN_FILE: false
• Jms_guacamole �� https://github.com/jumpserver/docker-guacamole ��
• Jms_guacamole ������ /opt/docker-guacamole
1. Jms_guacamole ����������� Web �����������
# ���������� guacamole
$ docker stop jms_guacamole
$ docker rm jms_guacamole
$ Server_IP=`ip addr | grep 'state UP' -A2 | grep inet | egrep -v '(127.0.0.
,→1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1`
,→jms_guacamole:1.5.6
# �������� guacamole
$ vi ~/.bashrc
...
...
$ rm -rf /config/guacamole/keys/*
$ /etc/init.d/guacd start
$ sh /config/tomcat9/bin/startup.sh
2. VNC ������
- VNC ����������
# �: RealVNC Server, �� Options-Security ������ Encryption � Prefer off
# ���� windows ��
# �� https://docs.ansible.com/ansible/latest/user_guide/windows_setup.html#windows-ssh-
,→setup ��
# �� OpenSSH
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
# �����
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -
,→Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
# �� OpenSSH
net start sshd
# �� OpenSSH ��
Set-Service sshd -StartupType Automatic
�� Web �� Windows ��
����������������������
(���)
"����" ����
"��" ������� �� (��������� administrator, ����� administrator ���)
�������������( ���������������������� )
������
Windows �������������� Windows ��, ������ ��� - G�, ������� G ���������, ����������� Ctrl + alt + shift
9.9 ������
��������������������������
1. git pull ��� error: Your local changes to the following file would be overwritten by merge
# ���������� (���)
$ git stash
$ git pull
$ git stash pop
# ����git diff -w +��� ������������
# ��������� (��)
# ���� git checkout + �����������
# � git checkout apps/jumpserver/settings.py # ��� apps/jumpserver/settings.py ���������
# ��������, (����)
$ git reset --hard
$ git pull
2. sh make_migrations.sh ��� 1064, ”You have an error in your SQL syntax; check the manual than
corresponds to your MySql server version for the right syntax to use near ’(6) NOT NULL’”
3. ����������������, ���������
# ���������, �� django_migrations �
$ mysqldump -uroot -p jumpserver --ignore-table=jumpserver.django_migrations > /opt/
,→jumpserver.sql
# ��� Jumpserver ��
(����)
(���)
$ mv /opt/jumpserver /opt/jumpserver_bak
# �� clone ��
$ cd /opt
$ git clone https://github.com/jumpserver/jumpserver.git
$ cd jumpserver
# ��������, ��������1.4.0
$ git checkout 1.4.0 # 1.4.0 �����, �������������, � 1.3.1 ��� git checkout 1.3.1
# ����
$ source /opt/py3/bin/activate
$ yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt)
$ pip install wheel
$ pip install -r /opt/jumpserver/requirements/requirements.txt
# ���������
$ mysql -uroot
> create database jumpserver01 default charset 'utf8';
> grant all on jumpserver01.* to 'jumpserver01'@'127.0.0.1' identified by 'weakPassword';
> flush privileges;
> quit
# ������
$ cp /opt/jumpserver_bak/config.py /opt/jumpserver/
$ vim /opt/jumpserver/config.py
DB_ENGINE = 'mysql'
DB_HOST = '127.0.0.1'
DB_PORT = 3306
DB_USER = 'jumpserver01'
DB_PASSWORD = 'weakPassword'
DB_NAME = 'jumpserver01'
# ������
$ cd /opt/jumpserver/utils
$ sh make_migrations.sh
# ���������, ��������
$ mysql -uroot
> use jumpserver01;
> source /opt/jumpserver.sql
# �� jumpserver, ������
$ cd /opt/jumpserver
$ ./jms start
# �� web ���������
$ �����������������
# ��������(����)
$ mysql -uroot
(����)
(���)
> drop database jumpserver;
> quit
server {
listen 80;
server_name www.jumpserver.org; # ���������
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name demo.jumpserver.org; # ���������
ssl_certificate /etc/nginx/sslkey/1_jumpserver.org_bundle.crt; # ������
ssl_certificate_key /etc/nginx/sslkey/2_jumpserver.org.key; # ������
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!
,→RC4; # ���������������
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # �����
ssl_prefer_server_ciphers on;
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 /koko/ {
proxy_pass http://localhost:5000;
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 /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 /ws/ {
proxy_pass http://localhost:8070;
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 / {
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;
}
}
1. �� firewalld
2. �������� IP ��
(���)
$ firewall-cmd --list-all # ��������
# ��
# �� 192.168.100.166 �� 6379 ��
$ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.
,→100.166" port protocol="tcp" port="6379" accept"
# �� 172.16.10.166 �� 3306 ��
$ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.16.10.
,→166" port protocol="tcp" port="3306" accept"
# �� 10.10.10.166 �� 8080 ��
$ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.10.10.
,→166" port protocol="tcp" port="8080" accept"
3. ������ IP ��
# ��
# ���� 2222 ��
$ firewall-cmd --zone=public --add-port=2222/tcp --permanent
# ���� 8080 ��
$ firewall-cmd --zone=public --add-port=8080/tcp --permanent
9.12 ������������
$ source /opt/py3/bin/activate
$ cd /opt/jumpserver/apps
$ python manage.py shell
>>> from assets.models import Asset
>>> from orgs.models import Organization
>>> from users.models import User
>>> dev_org = Organization.objects.create(name='���')
>>> user = User.objects.create(name='��', username='user', email='user@jumpserver.org')
>>> user.set_password('PassWord')
>>> user.save()
>>> dev_org.admins.add(user)
>>> dev_org.users.add(user)
>>> exit()
����������
$ source /opt/py3/bin/activate
$ cd /opt/jumpserver/apps
$ python manage.py shell
>>> from assets.models import Asset
>>> from orgs.models import Organization
>>> from users.models import User
>>> dev_org = Organization.objects.get(name='���')
>>> user = User.objects.get(username='admin')
>>> dev_org.admins.add(user)
>>> exit()
������������
$ source /opt/py3/bin/activate
$ cd /opt/jumpserver/apps
$ python manage.py shell
>>> from assets.models import Asset
>>> from orgs.models import Organization
>>> from users.models import User
>>> dev_org = Organization.objects.get(name='���')
>>> user = User.objects.get(username='admin')
>>> dev_org.users.add(user)
>>> exit()
������������
$ source /opt/py3/bin/activate
$ cd /opt/jumpserver/apps
$ python manage.py shell
>>> from assets.models import Asset
>>> from orgs.models import Organization
>>> from users.models import User
>>> dev_org = Organization.objects.get(name='���')
>>> user = User.objects.create(name='����', username='test', email='test@jumpserver.org')
>>> user.set_password('PassWord')
(����)
(���)
>>> user.save()
>>> dev_org.users.add(user)
>>> exit()
9.13 ����
1. ���������������
2. luna ����
3. ���������
$ vi /opt/jumpserver/config.yml
# 86400 ����(s)
4. ������
... # ��
location /koko/ {
proxy_pass http://�������url��/koko/;
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; # ���� log
}
location /guacamole/ {
proxy_pass http://�������url��/guacamole/;
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; # ���� log
}
location /ws/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8070;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
...
listen 80;
server_name demo.jumpserver.org;
location / {
# ���IP�������IP
proxy_pass http://192.168.244.144;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 150;
}
location /koko/ {
(����)
(���)
proxy_pass http://192.168.244.144/koko/;
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;
}
location /guacamole/ {
proxy_pass http://192.168.244.144/guacamole/;
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;
}
location /ws/ {
proxy_pass http://192.168.244.144/ws/;
proxy_http_version 1.1;
proxy_buffering off;
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;
}
}
8. ��������
$ source /opt/py3/bin/activate
$ cd /opt/jumpserver/utils
(����)
(���)
$ sh unblock_all_user.sh
# ����� unblock_all_user.sh ��
$ source /opt/py3/bin/activate
$ cd /opt/jumpserver/apps
$ python manage.py shell
>>> from django.core.cache import cache
>>> cache.delete_pattern('_LOGIN_BLOCK_*')
>>> cache.delete_pattern('_LOGIN_LIMIT_*')
>>> exit()
$ source /opt/py3/bin/activate
$ cd /opt/jumpserver/apps
$ celery -A ops purge -f
����
10.1 1.5.6
2020�1�2�
����
• ����������� MFA ����������������
����
• ���� IPv6
• ����������
• Windows ����
• �������Swift�Ceph
• ������������
• ������
����
• ��/��������� Terminal ��
• ��������
• ������������DEFAULT��������
• ����������������������
• ���� Form ����������RemoteApp�DatabaseApp�
• ��������
• ����������
• �����������������
• API �� serializer_classes ���default, display�
177
Jumpserver Documentation, �� latest
• ������� Tab ��
• ����nav������������������������ message ���
• �����������������������
• ���������layzproperty�������
• �����������������
• ��Ops Task�������������
• ����� Encryptjsonfield
• �� Adhoc ��� become ���������
• ����������API�����
• �������������
• ����������
• �����ES�������� required
• ���������������
• �� Web ����������
• �� Web ���������
• �� SSH �������������
��Bug
• ��������������LDAP��������������
• ������������
• ������ id ������
• ��������������������������
• ���������MFA���������
• ������������
• ���������������
• ���S3���������
• ������
����
• psutil==5.6.5
• go-elasticsearch v6.8.5
10.2 1.5.5
2019�12�4�
����
• ���������
• ���������������
• �����MFA Radius�
• �������������
• �� Windows ������
����
• LDAP/AD ��
• �������������
• ������������������
• ����������
• ���������
• ������������
• �����������Windows�
• ����������
• �����������
• �����������
��Bug
• ��������������/�����������
• �������������
• ���� telnet ����
10.3 1.5.4
2019�10�23�
����
• ����������� -> �����
• LDAP ��������������������������������� config_example.yml ��� AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS�
����
• �� LDAP ����/����������������
• �����������������������
• �� select2 js/css ����(4.0.10)�������������������
• �� celery log ����� Websocket ���
• ������ API�������������������
• ������ name ��������
• �����get_no_parent_nodes.py
• ����/����������->������������
• ���� API � get_queryset ��
• �������� API �������������������
• �� session �� protocol ��
• �� form serializer ��������
• ����������������
• �������� Auth info ����� MFA ��
• ����������
• �����������������������
• ���������������������������
• ���� api �����������
• �� table �������
• �� jms �����stop �������
• �������������������00:00:00�������23:59:59
• �������������
• ���������������X-pack ����
��Bug
• ���������� API � Connectivity is not JSON serializable � Bug
• ������� es �������������������
• �������� MAPPING�elasticsearch -> es�
• ���������� invalid:false ��� 500 ��
• ������ csv �������
• ���� favorite � empty �������
• ����������������
• ��������������������/���������X-pack ����
• ������������������X-pack ����
����
• select2 ���� 4.0.10������������������
10.4 1.5.3
2019�9�24�
����
• � v1.5.3 ������ v1.5.3� �Koko ��� Coco � Jumpserver ������������������� Coco �������
����
• ������ API Key ��������������� -> API Key�
• ����������� RDP Session
• �������
����
• ���������
• �������������������
• ���� asset modal table
• �� URL ��
• �� Swagger
• �������������������
• ��������������������
• �������telnet (beta) => telnet
• WebTerminal ��������
��Bug
• ��������������������
• ������������������������
• �����������������������
• �����������������
• �������������
• ����������� request ���
• ���������������initial_data ���������
• ��������������������������
• �������� Session ������
• ���������������������������������������
• ��������������� NVMe ������
• ����������
����
• �� jQuery v3.1.1
10.5 1.5.2
2019�7�16�
����
• ����-���������������
����
• ���������������������������
• ����API����
• ������������
• ��/��������������
��Bug
• ��������������������
• ��������������������
• ���������������������������������������)
• �������������������������������
• �����������������
• ����������������
• ���������������������������
• ���������������������
• �������8�����
• ��������������������������
• ��������������
• ����������������
• ���������������������
• �����������������
10.6 1.5.1
2019�7�6�
����
• ��������������
����
• ��������������
• ������������API���
• �������������������������������
• ������������
• �����������API/CSV, ����������������
• ���������������SMTP��������������
• �������������������������������
• ��(coco/guacamole)��Session/FTP������ name�username���
• Windows�����SSH����
• Windows������������������������
• ������LDAP����
• ����windows�����������
• �����������������
• ���������coco/guamole��Default�����
• ��������/��/�����������������������
��Bug
• ��������excel�������
• ��������/����������������Bug
10.7 1.5.0
2019�5�29�
����
• ����MFA������������
• ����������������������
• �����������������(��������������)
• (��/���/��/����/����)������csv����������������
• LDAP��SSL (pem�� jumpserver/data/certs/ldap_ca.pem)
• ��Option����API������HTTP����������
• ��RemoteApp
����
• �������ip�����host��
• OpenID Middleware������
• ����API��search��
• ��ldap��is_active����bool����(���LDAP��������������Jumpserver���)
Bug��
• ��LDAP���������������
• ��LDAP�������������
• ���������������””�����������bug
10.8 1.4.10
2019�4�30�
����
• ���������������������������
����
• ������������������������
• Luna���Luna�������
Bug��
• ����API�������bug
• ��luna�������OpeID���bug
• ����azure�����������bug
• ��������bug
• �������Azure�bug
10.9 1.4.9
2019�3�26�
Bug��
• ��������������
• ��celery�����������bug
• �����������
• ����token�������
• ��������������bug
��
• sudo����������������
• ������users������authentication
• ����migrations
• ��������
• docker build��Mysql client��
• coco,guacamole�������api, ������������������
��
• ��������
• ������������������������
• ����������������������� ������������
• �������
• �����ssl
• ldap������
coco
• ������������
• ������������
• ����sftp��bug
• ��������decode���
• ��������������������
luna
• ��������
10.10 1.4.8
2019�2�22�
• ��command filter ����������
• LDAP�����
• ����������ceph, s3��cepht
• gunicorn����
• telnet����������������
• ��session 10���������
10.11 1.4.7
2019�1�29�
• �� radius��
• ����coco�host key, ������coco������� Host key
• ����������
• ��������� yml��
• ������
• �������������
• ��������������������, �������
• sftp����home��, ���������
• ��luna������bug
• luna�����������
10.12 1.4.6
2018�12�19�
• ��������������������home����
• ����������, ������
• coco� p����������
• ������, �������
• ��bug
10.13 1.4.5
2018�12�12�
• ����migrations��������
10.14 1.4.4
2018�11�11�
• ������, �������
• ��luna����
• ���������
• ���������
• ��openid��
10.15 1.4.3
2018�10�12�
• ������
10.16 1.4.2
2018�10�8�
• ��web sftp, �����������
• ������
10.17 1.4.1
2018�9�4�
• ����������
• �������������
• ��������������
• ������, ������
• ���zmodem��
• ����������
• ��session������
• ��ssh���������
• luna������IP
• ������
10.18 1.4.0
2018�8�7�
• ���������, ���������, ����������� �����������
• Sftp������� ���.��
• Luna����IP��
• ����������ip
• ��bug���
10.19 1.3.3
2018�7�17�
• ��telnet��
• ������������, �������Jumpserver
• ����������
• session�����
• ���������bug
• ������������
10.20 1.3.2
2018�6�11�
• ��������������, ��������������
• ������MFA
• ��EMAIL�����
• ��������
• ����BUG
• ��������
• ��requirements��
• ��luna����, ������
• ��luna����
• �����������bug
• ���������bug
10.21 1.3.1
2018�5�24�
• ����������
• ��window����
• ������bug
• ���� �0��, ���0 ���1
• ��������������
• �������, ����������������
10.22 1.3.0
2018�5�2�
• ������(Google Authenticator)
• ����bug
• ���������
10.23 1.2.0
2018�4�13�
• sftp������
• ��sftp����
10.24 1.1.1
2018�4�6�
• ������
• ���������������
• ������������
10.25 1.1.0
2018�4�3�
• ����������
• ������
• ������
• rdp gateway����
• ����bug
10.26 1.0.0
2018�3�15�
• Windows��
• �����
• ���
• ��/������OSS/S3�ES
• �����
• ��������
• ����
• ����������
• Web Terminal��
• ����
• LDAP��
10.27 0.5.0beta
2017�5�21�
• coco�luna����
• ������
• ����
• ������
• ��bug��
10.28 0.4.0beta
2017�5�21�
• �����Python�Django�� Python3.6.1, Django 1.11
• ������ Django Class Base View��
• ����������, �����
• ��Restful API
• �� Jumpserver, terminal, web termial����� Jumpserver, coco, luna�coco�luna�����, ����
• �����, ��+��
• Ansible�� 2.1 ��
• ����������
• �������
• ������������
• ������
• ���������������
• ���connect��, ���� ssh server, �����
• web terminal �������
• ����������, ����
• ��������
10.29 0.3.3
2016�12�14�
• �����bug
10.30 0.3.2
2016�4�5�
• ������
• ������
• ������, ip��
10.31 0.3.1
2016�3�31�
• ��ssh����
• ��web terminal����
• ��������
• ������
• ������
• ��Kill��
• ������bug
10.32 0.3.0
2015�12�20�
• ��������
• ��������
• �����ID����
• ������
• ������ansible��
• ����
• ��web terminal
• ��web�������
• ������
• ����������
• ����Excel�����
• ��������
• ����������(�����������, �dev, dba�)
• ������������
• ��������
• ��sudo��
• ����������
• ����������
• ��web�������
10.33 0.2.0
2015�04�19�
• ��paramiko��ssh��������(������pexpect����)
• �����������
• ��������, �����
• ���������
• ������
• Web��������
• ����������������
• ���������
• ����, ���, ���
• ����, ��������
• ������������ map, �������ldap���
• ����, sudo����������
• ��������, ����
• ������������, ��������
• ������
• ������web�������
• ��������
• ����������
• ������
• ������
• ���������
• ������������
10.34 0.1.1
2014�11�14�
• ��shell��, �����
• �����
• ��Web��sudo
• ��Web������
• ��Web����session��
• ��Web������session
• ��������������
• ��web�������
• ������������
• ����������
• ������web����
• ��admin��������
• ��IDC
• ����
• admin������key
10.35 0.1.0
2014�8�15�
• �������
• bootstrap����
• ����
193