jumpserver注意事項以及報錯處理


需要注意下面亮點 
在使用jumpserver過程中,有一步是系統用戶推送,要推送成功,client(后端服務器)要滿足以下條件:

  • 后端服務器需要有python、sudo環境才能使用推送用戶,批量命令等功能
  • 后端服務器如果開啟了selinux,請安裝libselinux-python

在使用Jumpserver過程中的一些名詞解釋

  • 用戶:用戶是授權和登陸的主體,將來為每個員工建立一個賬戶,用來登錄跳板機, 將資產授權給該用戶,查看用戶登陸記錄命令歷史等。
  • 用戶組:多個用戶可以組合成用戶組,為了方便進行授權,可以將一個部門或幾個用戶 組建成用戶組,在授權中使用組授權,該組中的用戶擁有所有授權的主機權限。
  • 資產:資產通常是我們的服務器、網絡設備等,將資產授權給用戶,用戶則會有權限登 錄資產,執行命令等。
  • 管理賬戶:添加資產時需要添加一個管理賬戶,該賬戶是該資產上已有的有管理權限的用戶, 如root,或者有 NOPASSWD: ALL sudo權限的用戶,該管理賬戶用來向資產推送系統用戶, 為系統用戶添加sudo,獲取資產的一些硬件信息。
  • 資產組:同用戶組,是資產組成的集合,為了方便授權。
  • 機房:又稱IDC,這個不用解釋了吧。
  • Sudo:這里的sudo其實是Linux中的sudo命令別名,一個sudo別名包含多個命令, 系統用戶關聯sudo就代表該系統用戶有權限sudo執行這些命令。
  • 系統用戶:系統用戶是服務器上建立的一些真實存在的可以ssh登陸的用戶,如 dev, sa, dba等,系統用戶可使用jumpserver推送到服務器上,也可以利用自己公司 的工具進行推送,授權時將用戶、資產、系統用戶關聯起來則表明用戶有權限登陸該資產的這個系統用戶,比如用戶小明 以 dev系統用戶登錄 172.16.1.1資產, 簡單理解就是 將某個資產上的某個系統用戶映射給這個用戶登錄。
  • 推送系統用戶:添加完系統用戶,需要推送,推送操作是使用ansible,把添加的系統用戶和系統用戶管理的sudo,推送到資產上,具體體現是在資產上useradd該系統用戶,設置它的key,然后設置它的sudo,為了讓用戶可以登錄它。
  • 授權規則:授權規則是將資產系統用戶和用戶關聯起來,用來完成授權。 這樣用戶就可以以某個系統用戶賬號登陸資產。大家對這好像不是很理解,其實也是對系統用戶, 用戶這里沒有搞清楚。我們可以把用戶當做虛擬的用戶,而系統用戶是真實再服務器上存在的用戶, 系統用戶可以使用jumpserver推送,也可以自己手動建立,但是推送的過程一定要有,哪怕是模擬 推送(不選擇秘鑰和密碼推送,如網絡設備),因為添加授權規則會檢查推送記錄。為了簡化理解, 我們暫時 以 用戶 資產 系統用戶 來理解,暫時不考慮組,添加這樣的規則意思是 授權 用戶 在這個資產上 以這個系統用戶來登陸, 系統用戶是一組具有通用性,具有sudo的用戶, 不同的用戶授權不同的 系統用戶,比如 dba可能有用數據庫的sudo權限。
  • 日志審計:分為以下5個方式:1)在線:查看當前在線的用戶(非web在線),可以監控用戶的命令執行,強制結束用戶 登錄;2)實時監控:實時監控用戶的操作;3)登錄歷史:查看以往用戶的登錄歷史,可以查看用戶登陸操作的命令,可以回放用戶 執行命令的錄像;4)命令記錄:查看用戶批量執行命令的歷史,包含執行命令的主機,執行的命令,執行的結果;5)上傳下載:查看用戶上傳下載文件的記錄。
  • 默認設置:默認設置里可以設置 默認管理賬號信息,包括賬號密碼密鑰,默認信息為了方便添加資產 而設計,添加資產時如果選擇使用默認管理賬號,則會使用這里設置的信息,端口是資產的ssh端口,添加 資產時,默認會使用該端口。

--------------------------------------------Jumpserver中的用戶,系統用戶,管理用戶對比---------------------------------------

1
2
3
4
5
6
為了簡單的描述這個問題,可以舉例來說明,:
1)用戶:小王(公司員工),
2)系統用戶:dev(后端服務器上存在的賬號),
授權時將系統用戶dev在某台后段服務器授權給小王,這樣小王登陸后端服務器,其實是登陸了服務器上的dev用戶,類似執行 "ssh dev@somehost"
3)管理賬號: 是為了幫助大家推送系統用戶用的
在jumpserver上新建系統用戶並推送, 其實相當於執行了 "ssh 管理賬戶@somehost -e 'useradd 系統賬號'" , 這個是用ansible完成這樣的操作。

下面簡單說下在Jumpserver的web界面里添加用戶、推送用戶等操作流程:

1. 添加用戶
用戶管理 - 查看用戶 - 添加用戶 填寫基本信息,完成用戶添加。
用戶添加完成后,根據提示記住用戶賬號密碼,換個瀏覽器登錄下載key,
ssh登錄jumpserver測試

2. 添加資產
資產管理 - 查看資產 - 添加資產 填寫基本信息,完成資產添加

3. 添加sudo
授權管理 - Sudo - 添加別名 輸入別名名稱和命令,完成sudo添加

4. 添加系統用戶
授權管理 - 系統用戶 - 添加 輸入基本信息,完成系統用戶添加

5. 推送系統用戶
授權管理 - 推送 - 選擇需要推送的資產或資產組完成推送

推送只支持服務器,使用密鑰是指用戶從跳板機跳轉時使用key,反之使用密碼,
授權時會檢查推送記錄,如果沒有推送過則無法完成系統用戶在該資產上的授權。
如果資產時網絡設備,請不要選擇密碼和秘鑰,模擬一下推送,目的是為了生成
推送記錄。

6. 添加授權規則
授權管理 - 授權規則 - 添加規則 選擇剛才添加的用戶,資產,系統用戶完成授權

7. 測試登錄
用戶下載key 登錄跳板機,會自動運行connect.py,根據提示登錄服務器
用戶登陸web 查看授權的主機,點擊后面的鏈接,測試是否可以登錄服務器

8. 監控和結束會話
日志審計 - 在線 查看當前登錄的用戶登錄情況,點擊監控查看用戶執行的命令, 點擊阻斷,結束用戶的會話

9. 查看歷史記錄
日志審計 - 登錄歷史 查看登錄歷史,點擊統計查看命令歷史,點擊回放查看錄像

10. 執行命令
同7 測試命令的執行,命令記錄查看 批量執行命令的日志

11. 上傳下載
同7 測試文件的上傳下載,日志審計 - 上傳下載 查看上傳下載記錄

下面分享幾個問題的排查注意點:

1)查看日志
tail -f logs/jumpserver.log
里面包含了詳細的日志,包含了賬號和密碼,一切完成后,請將 jumpserver.conf中的log改為 warning等

2)推送系統用戶失敗
在系統用戶列表,點擊系統用戶名稱,查看系統用戶詳情,把鼠標放到失敗按鈕上,會看到失敗的原因,通常是因為 管理賬號添加的不對(見管理賬號名稱解釋),或服務器沒有安裝sudo(推送系統用戶時,會推送sudo設置)

3)郵件發送失敗
如果出現mail,smtp等錯誤通常都是由於發送郵件導致的,請嘗試不同提供商的郵件設置

4)service啟動失敗
請進入/opt/jumpserver目錄,手動運行
# python manage.py runserver 0.0.0.0:80
# python run_websocket.py
如果啟動失敗,可能是由於 80端口和3000端口已經被占用,或者數據庫賬號密碼不對,請檢查

5)監控,websocket, web命令執行失敗
它們會像運行的websocket服務發起請求, 可能是websocket沒有啟動,可能是Jumpserver.conf中websocket的地址不正確(注意這個文件里的ip地址的配置,內外網地址?端口通不通?),務必保證設置的地址用戶可以訪問到(映射或防火牆等), service.sh先關掉服務器,手動運行, 查看websocket的console輸出

6)Crypto,HAVE_DECL_MPZ_POWM_SEC等錯誤
很常見的錯誤,通常是由 pycrypto的版本問題,請卸載重新安裝
# pip uninstall pycrypto
# rm -rf /usr/lib64/python2.6/site-packages/Crypto/
# pip install pycrypto

==================================================
問題記錄一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
默認跳板機的上傳文件有限制大小為256M,可以修改dropzone.js
[root@ test -vm001 ~] # vim /opt/jumpserver/static/js/dropzone/dropzone.js ,296 行
maxFilesize: 5000,
  
還要安裝一個nginx代理,以用來改善它的80端口訪問和改善WEB大文件上傳,加上一個http: //jumpserver .venic.com /doc
來鏈接使用說明
  
[root@ test -vm001 http] # vi uploadbigfile.conf
server {
         listen  80;
         client_max_body_size 5g;
  
         proxy_connect_timeout 300;
         proxy_read_timeout 300;
         proxy_send_timeout 300;
         proxy_buffer_size 64k;
         proxy_buffers 4 32k;
         proxy_busy_buffers_size 64k;
         proxy_temp_file_write_size 64k;
  
         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_http_version 1.1;
                 proxy_set_header Upgrade $http_upgrade;
                 proxy_set_header Connection  "upgrade" ;
                 proxy_pass http: //127 .0.0.1:8000 /ws/ ;
         }
         location / {
                      proxy_pass http: //127 .0.0.1:8000;
         }
         location  /file/upload/  {
  
                      proxy_pass http: //127 .0.0.1:8083;
         }
         location ^~  /doc/  {
                 proxy_pass http: //127 .0.0.1:8088/;
         }
}
  
server {
         listen  8088;
         location / {
             root    /opt/jumpserver/docs/ ;
             index  index.html index.htm;
         }
}
  
  
 
由於多了一個8083端口,還要啟動這個
[root@ test -vm001 ~] # cd /opt/jumpserver
[root@ test -vm001 ~] # python manage.py runserver 127.0.0.1:8083 &
*************************************************
xshell工具的上傳大小還沒解決,以下是剛才修改配置的位置,但測試最終提示不超過2G的單文件。
  
上傳文件有限制大小為256M,可以修改dropzone.js
[root@ test -vm001 ~] # vi /opt/jumpserver/static/js/dropzone/dropzone.js ,296 行
maxFilesize: 5000,
  
[root@ test -vm001 ~] # /opt/jumpserver/service.sh restart

問題記錄二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
問題記錄二:
Web console登錄機器,會產生過大的CPU,單開一個WEB console就消耗了44%的CPU,2核中占滿一個。而使用Xshell公鑰匙則沒有問題
如果要禁用Web Console的話,修改Web前端,但我沒有刪掉
進入 /opt/jumpserver/templates/jasset/asset_cu_list .html     -----修改130行,這個是修改普通用戶界面的
進入 /opt/jumpserver/templates/jasset/asset_list .html    --------修改135行,這個是修改管理員界面的
  
比如我把它修改成跳轉方式到其它網站連接去
<a value= "{{ asset.id }}"  class= "conn btn btn-xs btn-warning" >連接< /a >
<a href= "http://jumpserver.venic.com/doc"  class= "conn btn btn-xs btn-warning" >連接< /a >
  
而我沒有取消,是因我調高CPU配置為8核后,發現開了8個窗口,最終還是最多消耗2個核,所以我沒有禁用web console
-------------------------------------------------------------------------------------------------------------
  
需求變更一:
  
修改web console的窗口寬一點
[root@ test -vm001 ~] # vim /opt/jumpserver/static/js/webterminal.js
改里面所有100值為160的值
  
修改webconsole 窗口,加個注釋,禁用用戶修改窗口大小
  
<!--
<div class= "termChangBar" >
     <input  type = "number"  min= "100"  value= "100"  placeholder= "col"  id = "term-col" />
     <input  type = "number"  min= "35"  value= "35"  placeholder= "row"  id = "term-row" />
     <button  id = "col-row" >修改窗口大小< /button >
< /div >
-->
  
修改彈窗的窗口體大小(非terminal),
進入 /opt/jumpserver/templates/jasset/asset_cu_list .html  -----修改237行和249行  這個是修改普通用戶界面的
進入 /opt/jumpserver/templates/jasset/asset_list .html     --------248行和259 這個是修改管理員界面的
  
window. open (new_url+data,  "_blank" 'width=1000, height=600' );
  
---------------------------------------------------------------------------------------------------------------
需求變更二:
修改左側導航欄的訪問官網鏈接
進入 /opt/jumpserver/templates/nav .html   52行和80行
  
<a href= "http://jumpserver.venic.com/doc"  target= "_blank" ><i class= "fa fa-database" >< /i > <span class= "nav-label" >訪問官網< /span >< /a >
上傳一個用word文檔寫的“操作指引”到如下鏈接,

這個word文檔轉成html,這里只是使用另存為html自己保存成2個新文件(index.files和index.htm)

1
2
3
4
5
6
7
8
9
10
11
12
13
然后我在htm文件的< head >< /head >標簽中,添加了一個<style>< /style >如下標簽,目的是讓圖片自動伸縮和居中
<style>
html{
    
}
body{width:800px;
     margin:auto;
     padding: 0px !important; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; min-height: auto !important; color: rgb(0, 130, 0) !important;">#FFFFFF;
    }
img {max-width:800px;}
< /style >
  
然后把這2個文件上傳至服務器的 /opt/jumpserver-master/docs 目錄下。所以才上面的nginx多一條跳轉的配置

1
2
3
然后我們還要修改首頁的前代碼,讓“連接使用說明”指到這個 http: //jumpserver .venic.com /doc/
修改處在
/opt/jumpserver-master/templates/nav .html

測試跳轉后的顯示界面樣式如下:

問題記錄三:

1
2
3
4
5
修改sshd配置,禁止密碼登錄 #
[root@ test -vm001 ~] # vim /etc/sshd/sshd_config
......
PasswordAuthentication no
[root@ test -vm001 ~] # service sshd restart

問題記錄四:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
非admin的普通用戶登錄jumpserver界面,通過webshell登錄服務器的時候,連接報錯!報錯信息為:
Connection Reset By Peer
   
通過jumpserver的log日志,可以看出Websocket連接失效了
[root@ test -vm001  install ] # tail -f /data/jumpserver/logs/jumpserver.log
2018-01-18 09:18:40,660 - views.py - DEBUG - 獲取授權系統用戶: ops,app,dev
2018-01-18 09:18:46,429 - run_websocket.py - DEBUG - Websocket: session_key:
2018-01-18 09:18:46,430 - run_websocket.py - WARNING - Websocket: Request auth failed.
2018-01-18 09:18:46,486 - run_websocket.py - DEBUG - Websocket: Close request
2018-01-18 09:18:48,589 - run_websocket.py - DEBUG - Websocket: session_key:
2018-01-18 09:18:48,589 - run_websocket.py - WARNING - Websocket: Request auth failed.
2018-01-18 09:18:48,645 - run_websocket.py - DEBUG - Websocket: Close request
 
通過重啟jumpserver服務重新建立Websocket鏈接即可此問題,但是過了一段時間后,Websocket鏈接會再次失效。
所以可以結合 crontab 定時重啟jumpserver。
[root@ test -vm001  install ] # crontab -e
* /2  * * * *  /data/jumpserver/service .sh restart >  /dev/null  2>&1

問題記錄五:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
jumpserver運行一段時間后,突然發現服務器的CPU負載很高,zabbix報警jumpserver服務器利用率已高達85%!
 
[root@jumpserver01 ~] # uptime
  14:03:49 up 52 days, 22:36,  4  users ,  load average: 33, 35, 38
 
[root@jumpserver01 ~] # top
top  - 14:04:12 up 52 days, 22:37,  4  users ,  load average: 1.02, 1.05, 0.80
Tasks: 902 total,   3 running, 899 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.6%us,  0.1%sy,  0.0%ni, 97.3% id ,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  65724264k total,  4008704k used, 61715560k  free ,   257600k buffers
Swap: 32767996k total,        0k used, 32767996k  free ,   230724k cached
 
    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                              
  20299 chengjun  20   0  360m  35m 4768 R 100.0  0.1  20:49.54 python                                                               
  32661 502      20   0  303m  25m 3720 S 100.0  0.1   0:00.22 python
  20299 chengjun  20   0  360m  35m 4768 R 100.0  0.1  20:49.54 python                                                               
  32661 502      20   0  303m  25m 3720 S 100.0  0.1   0:00.22 python
  25149 chengjun  20   0  360m  35m 4768 R 100.0  0.1  20:49.54 python                                                               
  38315 502      20   0  303m  25m 3720 S 100.0  0.1   0:00.22 python
  42299 chengjun  20   0  360m  35m 4768 R 100.0  0.1  20:49.54 python                                                               
  23161 502      20   0  303m  25m 3720 S 100.0  0.1   0:00.22 python
  ......
 
jumpserver服務器的配置是128G內存、40核CPU,按照這個配置,服務器硬件配置方面是絕對不會出現瓶頸的!
 
經排查是由於之前有些用戶登錄jumpserver后沒有退出程序,從而導致一直占用cpu資源。
[root@jumpserver01 ~] # ps -ef|grep python
root     20299  20284 98 13:42?       00:30:02 python  /data/jumpserver/connect .py
root     37155  37153  0 14:12?       00:00:00 python  /data/jumpserver/manage .py runserver 0.0.0.0:80
502      37156  37154  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
502      37171  37155  0 2017 ?       00:00:00  /usr/bin/python  /data/jumpserver/manage .py runserver 0.0.0.0:80
root     37228  37156  0 14:12?       00:00:00 python  /data/jumpserver/run_websocket .py
root     37229  37156  0 14:12?       00:00:00 python  /data/jumpserver/run_websocket .py
502      37230  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
zhenyj   37231  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
502      37232  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
502      37228  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
zhenyj   37229  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
zhenyj   37230  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
502      37231  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
root     37232  37156  0 14:12?       00:00:00 python  /data/jumpserver/run_websocket .py
502      37228  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
502      37229  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
wangbin  37230  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
root     37231  37156  0 14:12?       00:00:00 python  /data/jumpserver/run_websocket .py
root     37232  37156  0 14:12?       00:00:00 python  /data/jumpserver/run_websocket .py
502      37228  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
502      37229  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
xiaof    37230  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
525      37228  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
525      37229  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
wangbin  37230  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
chengwq  47230  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
chengwq  43230  37156  0 2017 ?       00:00:00 python  /data/jumpserver/run_websocket .py
 
如上信息,那些第五列顯示 "2017 ?" 信息的,即是之前登陸jumpserver后沒有完全退出以至於系統資源一直被占用。
批量 kill 掉這些程序的pid即可降低jumpserver服務器的CPU利用率。
[root@jumpserver01 ~] # ps -ef|grep python |awk '$5=2017 {print $2}'|xargs kill -9


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM