“Json”与“Jumpserver基础”:页面之间的差异

来自linuxsa wiki
(页面间差异)
跳转到导航 跳转到搜索
Evan留言 | 贡献
 
Evan留言 | 贡献
 
第1行: 第1行:


==基本知识==
=jumpserver install=
<pre>
 
加个开机启动
 
#在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:
$docker run --restart=always
#如果已经启动了则可以使用如下命令:
$docker update --restart=always <CONTAINER ID>
 
重启试一下
</pre>
==* init ==


什么是json:
==* ins mariadb  redis ==
<pre>
apt  install mariadb-client  mariadb-server redis -y


JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
sudo mysql_secure_installation


JSON建构于两种结构:
cat  /etc/redis/redis.conf | grep -v '#'
···
protected-mode no
requirepass foobareLXTXe2456
···


“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
监控 LO 127.0.0.1 可关也可不关
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。


==json查看 ==
#默认开启了的
<pre>
# 启动&自启动Redis
jq . file.json
systemctl restart redis
</pre>
systemctl enable redis


==代码==
update mysql.user set authentication_string=PASSWORD('OPS123456#') where user='root';
对简单数据类型的encoding(编码) 和 decoding(解码) 转为py 数据对象
flush privileges;




===使用dumps编码===
UPDATE user SET password=password('OPS123456#') WHERE user='root';
<span style="color:green;">使用简单的''''''''json.dumps'''''''' 方法对简单数据类型进行编码,</span><pre>例如:


In [1]: import json0


In [2]: obj = [[1,2,3],123,123.123,'abc',{'key1':(1,2,3),'key2':(4,5,6)}]
#这个有效果  mariadb 10
use mysql
SET password for 'root'@'localhost' = password('OPS123456#');


In [3]: encodedjson = json.dumps(obj)


In [4]: print repr(obj)
create database jumpserver char set utf8;
[[1, 2, 3], 123, 123.123, 'abc', {'key2': (4, 5, 6), 'key1': (1, 2, 3)}]
grant all on jumpserver.* to jumpserver@'%' identified by 'jumpserverLXTX136';


In [5]: print encodedjson
[[1, 2, 3], 123, 123.123, "abc", {"key2": [4, 5, 6], "key1": [1, 2, 3]}]


通过输出的结果可以看出,简单类型通过encode之后跟其原始的repr()输出结果非常相似,但是有些数据类型进行了改变,例如上例中的元组则转换为了列表。在json的编码过程中,会存在从python原始类型向json类型的转化过程,具体的转化对照如下:
grant all on *.*  to root@'127.0.0.1' identified by 'myFD23';


Python                JSON
监控了 127.0.0.1  我去  改为 0.0.0.0
cat /etc/mysql/mariadb.conf.d/50-server.cnf


dict                  object
bind-address           = 127.0.0.1
list,tuple           array
str,unicode          string
int, long, float      number
True                  true
False                false
None                  null
</pre>


===使用loads解码===
<span style="color:green;">json.dumps()方法返回了一个str对象encodedjson,我们接下来在对encodedjson进行decode(解码),得到原始数据,需要使用的json.loads()函数:</span>
<pre>
In [6]: decodejson = json.loads(encodedjson)
In [7]: print type(decodejson)
<type 'list'>
In [8]: print decodejson
[[1, 2, 3], 123, 123.123, u'abc', {u'key2': [4, 5, 6], u'key1': [1, 2, 3]}]


In [9]: print decodejson[4]['key1']
[1, 2, 3]


loads方法返回了原始的对象,但是仍然发生了一些数据类型的转化。比如,上例中‘abc’转化为了unicode类型。从json到python的类型转化对照如下:
root@prod-fincy-jumpserver:~# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address          Foreign Address        State      PID/Program name   
tcp        0      0 127.0.0.1:25            0.0.0.0:*              LISTEN      4129/exim4         
tcp        0      0 127.0.0.1:3306          0.0.0.0:*              LISTEN      12034/mysqld 


JSON Python


object dict
systemctl restart mariadb
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None
</pre>
</pre>


===json.dumps的常用参数===
==* docker  docker-compose  ins==
 
 
===* in jmp on docker ===
<pre>
<pre>
json.dumps方法提供了很多好用的参数可供选择,比较常用的有sort_keys(对dict对象进行排序,我们知道默认dict是无序存放的),separators,indent等参数。
所以随便映射一个端口8001用于Web访问,2222用户ssh访问,因为本服务器关闭了Selinux,如果没有关闭,还需要将8001与2222加入可http的端口,在Nginx服务器将会详细配置。
排序功能使得存储的数据更加有利于观察,也使得对json输出的对象进行比较,例如:


In [10]: data1 = {'b':789,'c':456,'a':123}
#我用这个  注意这个 IP  特别是多个机器会不小心搞错
In [11]: date2 ={'a':123, 'b':789,'c':456}
docker run --name jms_all -d \
In [12]: d1 = json.dumps(data1,sort_keys=True)
-v /opt/jumpserver:/opt/jumpserver/data/media \
In [14]: d2 = json.dumps(date2)
-p 8080:80 \
-p 2222:2222 \
-e SECRET_KEY=secret \
-e BOOTSTRAP_TOKEN=secret \
-e DB_HOST=172.16.220.146 \
-e DB_PORT=3306 \
-e DB_USER=jumpserver \
-e DB_PASSWORD=jumpserverLXTX136 \
-e DB_NAME=jumpserver \
-e REDIS_HOST=172.16.220.146 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD=foobareLXTXe2456 \
-e JUMPSERVER_KEY_DIR=/config/guacamole/keys \
-e GUACAMOLE_HOME=/config/guacamole \
-e JUMPSERVER_SERVER=http://127.0.0.1:8080 \
jumpserver/jms_all:v2.2.1


d3 = json.dumps(date2,sort_keys=True)


In [16]: print d1
{"a": 123, "b": 789, "c": 456}


In [19]: print d2
#官方文档的
{"a": 123, "c": 456, "b": 789}
docker run --name jms_all -d \
  -v /opt/jumpserver/data:/opt/jumpserver/data \
  -p 80:80 \
  -p 2222:2222 \
  -e SECRET_KEY=xxxxxx \
  -e BOOTSTRAP_TOKEN=xxx \
  -e DB_HOST=192.168.x.x \
  -e DB_PORT=3306 \
  -e DB_USER=root \
  -e DB_PASSWORD=xxx \
  -e DB_NAME=jumpserver \
  -e REDIS_HOST=192.168.x.x \
  -e REDIS_PORT=6379 \
  -e REDIS_PASSWORD=xxx \
  --privileged=true \
  jumpserver/jms_all:v2.2.1
 
 
  https://spex.top/archives/docker-jumpserver.html
 
  mysql 用户和密码写反了
 
  django.db.utils.OperationalError: (2006, "Access denied for user 'jumpserverLXTX136'@'172.17.0.2' (using password: YES)")
 
  </pre>
 
==api 添加host==
<pre>
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#  pip3  install httpsig
# usage # python3  addhost.py  'prod-mq'  '172.16.0.12'


In [20]: print d3
# 打开的你  URL 选择你的节点就行了  https://jump.com/ui/#/assets/assets?node=c81
{"a": 123, "b": 789, "c": 456}
import requests, json
import datetime
from httpsig.requests_auth import HTTPSignatureAuth
import sys


In [21]: print d1==d2
def add_host(hostname, ip):
False
    url = 'https://jump.com' + '/api/v1/assets/assets/'
    #web页面可以查到各种ID信息 数据库不会用
    data = {
        'hostname': hostname,
        'ip': ip,
        'platform': 'Linux',
        'protocols': 'ssh/22',
        'nodes': ['c81xxxxxx'], #节点id
        'is_active': True
    }
    response = requests.post(url, auth=auth, headers=headers, data=data)
    #state = json.loads(response.json())
    #print(state)
    print(response.text)
    #创建成功后返回主机id
    return json.loads(response.text)['id']


In [22]: print d1==d3
True


上例中,本来data1和data2数据应该是一样的,但是由于dict存储的无序特性,造成两者无法比较。因此两者可以通过排序后的结果进行存储就避免了数据比较不一致的情况发生,但是排序后再进行存储,系统必定要多做一些事情,也一定会因此造成一定的性能消耗,所以适当排序是很重要的。
#需要先创建好,创建方式参考下面的截图
auth = HTTPSignatureAuth(key_id='xxxx', secret='6xxxxx',
                        algorithm='hmac-sha256', headers=['(request-target)', 'accept', 'date'])
gmt_form = '%a, %d %b %Y %H:%M:%S GMT'
headers = {
    'Accept': 'application/json',
    'X-JMS-ORG': '00000000-0000-0000-0000-000000000002',
    'Date': datetime.datetime.utcnow().strftime(gmt_form)
}


if __name__ == '__main__':
    add_host(sys.argv[1], sys.argv[2])
</pre>


indent参数是缩进的意思,它可以使得数据存储的格式变得更加优雅。
In [23]: data1 = {'b':789,'c':456,'a':123}


In [24]: d1 = json.dumps(data1,sort_keys=True,indent=4)
[https://blog.csdn.net/weixin_45574286/article/details/116595903  Jumpserver API调用 python]


In [25]: print d1
[https://blog.csdn.net/EHOIST/article/details/106907295  Jumpserver API调用 python]
{
    "a": 123,
    "b": 789,
    "c": 456
}


In [26]: d1 = json.dumps(data1,sort_keys=True)
[https://www.jianshu.com/p/ae6f1710cfde Python3.7调用API批量添加资产主机到Jumpserver]


In [27]: print d1
[https://codeleading.com/article/1294358106/  Jumpserver批量添加资产并授权 ]
{"a": 123, "b": 789, "c": 456}


输出的数据被格式化之后,变得可读性更强,但是却是通过增加一些冗余的空白格来进行填充的。json主要是作为一种数据通信的格式存在的,而网络通信是很在乎数据的大小的,无用的空格会占据很多通信带宽,所以适当时候也要对数据进行压缩。separator参数可以起到这样的作用,该参数传递是一个元组,包含分割对象的字符串。
[https://www.zze.xyz/archives/python-add-host-to-jumpserver.html 调用API批量添加主机到JumpServer中]
print 'DATA:', repr(data)
print 'repr(data)            :', len(repr(data))
print 'dumps(data)            :', len(json.dumps(data))
print 'dumps(data, indent=2)  :', len(json.dumps(data, indent=4))
print 'dumps(data, separators):', len(json.dumps(data, separators=(',',':')))


输出:
==  USAGE ==
<pre>
  要用空上格式
  暂不支持OPENSSH格式的密钥,使用 ssh-keygen -t rsa -m pem生成


DATA: {'a': 123, 'c': 456, 'b': 789}
repr(data)            : 30
dumps(data)            : 30
dumps(data, indent=2)  : 46
dumps(data, separators): 25


通过移除多余的空白符,达到了压缩数据的目的,而且效果还是比较明显的。


另一个比较有用的dumps参数是skipkeys,默认为False。 dumps方法存储dict对象时,key必须是str类型,如果出现了其他类型的话(1,2):123,那么会产生TypeError异常,如果开启该参数,设为True的话,则会比较优雅的过度。
grant all on *.* to lxtx@'%' identified by 'FINCy5609824hHixxxxx';


In [30]: data = {'b':789,'c':456,(1,2):123}


In [31]: print json.dumps(data,skipkeys=True)
一个知识点
{"c": 456, "b": 789}


In [32]: print json.dumps(data)
网域列表
TypeError
TypeError: keys must be a string
</pre>


网域功能是为了解决部分环境无法直接连接而新增的功能,原理是通过网关服务器进行跳转登录。


===常用命令===
这个功能,一般情况不用到。


30分钟连接断开问题
在 系统设置--安全设置--连接最大空闲时间 默认的是30  可以改成你要的


====让python的json.dumps输出中文====
</pre>
<pre>  
===Note===
python的json.dumps方法默认会输出成这种格式"\u535a\u5ba2\u56ed",。
<pre>


要输出中文需要指定ensure_ascii参数为False,如下代码片段:0


json.dumps({'text':"中文"},ensure_ascii=False,indent=2)
注意 
问题: jumpserver error: 认证失败(用户名或密码错误
解决


系统用户用了个新的 devops 


{ "smg": "域名linuxsa.org添加成功!", "emg": "获取信息失败!" }0
然后这个用户添加prikey on web


<pre>
机器添加这个的pub buy
首先说明基本功能:


dumps是将dict转化成str格式,loads是将str转化成dict格式。
过滤的命令  yum reboot halt  poweroff  rm 好像前几个没效果 


dump和load也是类似的功能,只是与文件操作结合起来了。
用户列表里的用户是登录jumpserver的,系统用户是登录到jumpserver里以后再跳到系统里去登录的用户。
</pre>




json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)¶
[http://docs.jumpserver.org/zh/docs/dockerinstall.html Docker 安装]
将obj序列化为 JSON 格式流到fp ( .write()-支持类文件对象)


注:实际中dump用的较少。


压缩编码:


>>>
[http://docs.jumpserver.org/zh/docs/migration.html 服务迁移]
>>> import json
>>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
'[1,2,3,{"4":5,"6":7}]


解码 JSON:
==端口 ==
<pre>


>>>
    Jumpserver 默认 Web 端口为 8080/tcp, 默认 WS 端口为 8070/tcp, 配置文件 jumpserver/config.yml
>>> import json
    koko 默认 SSH 端口为 2222/tcp, 默认 Web Terminal 端口为 5000/tcp 配置文件在 koko/config.yml
>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
    Guacamole 默认端口为 8081/tcp, 配置文件 /config/tomcat9/conf/server.xml
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
    Nginx 默认端口为 80/tcp
>>> json.loads('"\\"foo\\bar"')
    Redis 默认端口为 6379/tcp
u'"foo\x08ar'
    Mysql 默认端口为 3306/tcp
>>> from StringIO import StringIO
>>> io = StringIO('["streaming API"]')
>>> json.load(io)
[u'streaming API']


</pre>
</pre>


===处理自己的数据类型===
===ssh===
ssh -p2222


json模块不仅可以处理普通的python内置类型,也可以处理我们自定义的数据类型,而往往处理自定义的对象是很常用的。
== sftp==
sftp -P 大写的P 不是小写的p


暂时省略请见
=note=
[http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html Json概述以及python对json的相关操作]
<pre>
jumpserver


=python操作json=
Django>=1.11
==09 获取json中key为name的所有值==
django-bootstrap3>=8.2.2
Pillow>=4.1.0  # 图像处理
djangorestframework>=3.6.2  # Web API
ForgeryPy  # 生成虚拟数据
#openpyxl>=2.4.0
celery>=4.0.2  # 完成异步任务
paramiko>=2.1.2  # 远程连接服务器
ansible>=2.2.2.0  # 自动化运维工具
django-simple-captcha>=0.5.5  # 验证码插件
django-formtools>=2.0  # 动态定义表单
sshpubkeys>=2.2.0
djangorestframework-bulk>=0.2.1
django-redis-cache>=1.7.1  # 缓存
requests>=2.13.0
itsdangerous>=0.24  # 加密数据
eventlet  # 以协程方式实现并发
django-filter>=1.0.2
passlib>=1.7.1  # 生成hash密文
gssapi
django-rest-swagger  # API的管理
django-auth-ldap  # 登录验证
ldap3  # 登录验证
 
 
</pre>
=troubleshooting=
==koko==
<pre>
<pre>
Connecting to 1.231.144.243:2222...
Could not connect to '1.231.144.243' (port 2222): Connection failed.


可见 不太正常  我在海外也 telnet  2222 不通  restart 搞定
[root@ntos ~]# telnet  127.0.0.1  2222
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Connection closed by foreign host.
[roottos ~]# docker ps
CONTAINER ID        IMAGE                      COMMAND            CREATED            STATUS              PORTS                                            NAMES
f235b4dae318        jumpserver/jms_coco:1.4.9  "entrypoint.sh"    10 days ago        Up 10 days          0.0.0.0:2222->2222/tcp, 0.0.0.0:5000->5000/tcp  jms_coco
#重启这个 docker 容器正常了
[root@tos ~]# docker restart  f235b4dae318
</pre>


输入:
==jumpserver 密钥不合法==
上传的秘钥在生成的时候不能设置密码,否则提示秘钥不正确。


[
=see also=
  {
      "id":1,
      "name":"name1",
      "color":[
        "red",
        "green"
      ]
  },
  {
      "id":2,
      "name":"name2",
      "color":[
        "pink",
        "yellow"
      ]
  }
]


输出:
[https://www.jianshu.com/p/81306abfba16 使用JumpServer管理你的服务器]


["name1", "name2"]


[https://blog.csdn.net/wanglei_storage/article/details/51002206 jumpserver 堡垒机配置使用图文详解]


[https://blog.csdn.net/imtech/article/details/89332410 Jumpserver入门介绍]


示例代码:
[https://blog.csdn.net/weixin_41004350/article/details/80183591 centos7 jumpserver安装与使用详解]


import json
[https://docs.jumpserver.org/zh/master/admin-guide/quick_start/ 快速入门]


sampleJson = """[
  {
      "id":1,
      "name":"name1",
      "color":[
        "red",
        "green"
      ]
  },
  {
      "id":2,
      "name":"name2",
      "color":[
        "pink",
        "yellow"
      ]
  }
]"""


data = []
==install==
try:
    data = json.loads(sampleJson)
except Exception as e:
    print(e)


dataList = [item.get('name') for item in data]
[https://spex.top/archives/docker-jumpserver.html Docker部署JumpServer]
print(dataList)


</pre>
https://docs.jumpserver.org/zh/master/install/docker_install/
 
[https://www.cnblogs.com/xiao987334176/p/12172811.html Jumpserver docker搭建]
 
[https://my.oschina.net/u/4313128/blog/4074012 jumpserver docker简单搭建]


[https://zhuanlan.zhihu.com/p/146762139  Python 操作 JSON 的 9 个示例]
[https://blog.51cto.com/14163901/2415413 docker下jumpserver跳板机 /堡垒机详细部署]


=ruby操作json=
[[Learn_ruby#ruby操作json]]


=参考=
[https://www.jianshu.com/p/c9d5bbde7018 2018-ubuntu下jumpserver的安装和使用]
[http://www.json.cn/ json 格式转换]


http://usyiyi.cn/translate/python_278/library/json.html
[https://blog.51cto.com/u_11451960/2640825  jumpserver介绍,安装,登录,用户管理,资产管理,客户端登录jumpserver]


[http://docs.python.org/library/json.html Python操作json的标准api库参考]
[https://zhuanlan.zhihu.com/p/327940052 一键安装JumpServer(堡垒机)开源版本图文详解]


jso官方说明参见:http://json.org/  http://json.org/json-zh.html
==Usage==


[http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html Json概述以及python对json的相关操作]
[https://www.cnblogs.com/twobrother/p/11423818.html JumpServer简单使用 ]


[https://www.bilibili.com/video/BV11q4y1s74P/?spm_id_from=333.788.videopod.episodes&vd_source=e3e41ea2b1d70e0e3a6a0372ee88d714&p=9 devops JSON]


[[category:python]]
[https://www.jianshu.com/p/832b1d6515dc jumpserver安装后遇到的死人坑]
[[category:ops]]

2022年8月10日 (三) 11:23的最新版本

jumpserver install

加个开机启动 

#在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:
$docker run --restart=always
#如果已经启动了则可以使用如下命令:
$docker update --restart=always <CONTAINER ID>

重启试一下 

* init

* ins mariadb redis

apt  install mariadb-client   mariadb-server redis -y

sudo mysql_secure_installation

cat  /etc/redis/redis.conf | grep -v '#'
···
protected-mode no
requirepass foobareLXTXe2456
···

监控 LO 127.0.0.1 可关也可不关 

#默认开启了的 
# 启动&自启动Redis
systemctl restart redis
systemctl enable redis

update mysql.user set authentication_string=PASSWORD('OPS123456#') where user='root';
flush privileges;


UPDATE user SET password=password('OPS123456#') WHERE user='root';


#这个有效果  mariadb 10 
use mysql 
SET password for 'root'@'localhost' = password('OPS123456#');


create database jumpserver char set utf8;
grant all on jumpserver.* to jumpserver@'%' identified by 'jumpserverLXTX136';


grant all on *.*  to root@'127.0.0.1' identified by 'myFD23';

监控了 127.0.0.1  我去   改为 0.0.0.0
cat /etc/mysql/mariadb.conf.d/50-server.cnf

bind-address            = 127.0.0.1



root@prod-fincy-jumpserver:~# netstat -nlpt 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      4129/exim4          
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      12034/mysqld   


systemctl restart mariadb

* docker docker-compose ins

* in jmp on docker

所以随便映射一个端口8001用于Web访问,2222用户ssh访问,因为本服务器关闭了Selinux,如果没有关闭,还需要将8001与2222加入可http的端口,在Nginx服务器将会详细配置。

#我用这个   注意这个 IP  特别是多个机器会不小心搞错 
docker run --name jms_all -d \
-v /opt/jumpserver:/opt/jumpserver/data/media \
-p 8080:80 \
-p 2222:2222 \
-e SECRET_KEY=secret \
-e BOOTSTRAP_TOKEN=secret \
-e DB_HOST=172.16.220.146 \
-e DB_PORT=3306 \
-e DB_USER=jumpserver \
-e DB_PASSWORD=jumpserverLXTX136 \
-e DB_NAME=jumpserver \
-e REDIS_HOST=172.16.220.146 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD=foobareLXTXe2456 \
-e JUMPSERVER_KEY_DIR=/config/guacamole/keys \
-e GUACAMOLE_HOME=/config/guacamole \
-e JUMPSERVER_SERVER=http://127.0.0.1:8080 \
jumpserver/jms_all:v2.2.1



#官方文档的 
docker run --name jms_all -d \
  -v /opt/jumpserver/data:/opt/jumpserver/data \
  -p 80:80 \
  -p 2222:2222 \
  -e SECRET_KEY=xxxxxx \
  -e BOOTSTRAP_TOKEN=xxx \
  -e DB_HOST=192.168.x.x \
  -e DB_PORT=3306 \
  -e DB_USER=root \
  -e DB_PASSWORD=xxx \
  -e DB_NAME=jumpserver \
  -e REDIS_HOST=192.168.x.x \
  -e REDIS_PORT=6379 \
  -e REDIS_PASSWORD=xxx \
  --privileged=true \
  jumpserver/jms_all:v2.2.1
  
  
  https://spex.top/archives/docker-jumpserver.html
  
  mysql 用户和密码写反了 
  
  django.db.utils.OperationalError: (2006, "Access denied for user 'jumpserverLXTX136'@'172.17.0.2' (using password: YES)")
  
  

api 添加host

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#  pip3  install httpsig
# usage # python3  addhost.py  'prod-mq'  '172.16.0.12'

# 打开的你  URL 选择你的节点就行了  https://jump.com/ui/#/assets/assets?node=c81
import requests, json
import datetime
from httpsig.requests_auth import HTTPSignatureAuth
import sys

def add_host(hostname, ip):
    url = 'https://jump.com' + '/api/v1/assets/assets/'
     #web页面可以查到各种ID信息 数据库不会用
    data = {
        'hostname': hostname,
        'ip': ip,
        'platform': 'Linux',
        'protocols': 'ssh/22',
        'nodes': ['c81xxxxxx'], #节点id
        'is_active': True
    }
    response = requests.post(url, auth=auth, headers=headers, data=data)
    #state = json.loads(response.json())
    #print(state)
    print(response.text)
    #创建成功后返回主机id
    return json.loads(response.text)['id']


#需要先创建好,创建方式参考下面的截图
auth = HTTPSignatureAuth(key_id='xxxx', secret='6xxxxx',
                         algorithm='hmac-sha256', headers=['(request-target)', 'accept', 'date'])
gmt_form = '%a, %d %b %Y %H:%M:%S GMT'
headers = {
    'Accept': 'application/json',
    'X-JMS-ORG': '00000000-0000-0000-0000-000000000002',
    'Date': datetime.datetime.utcnow().strftime(gmt_form)
}

if __name__ == '__main__':
    add_host(sys.argv[1], sys.argv[2])


Jumpserver API调用 python

Jumpserver API调用 python

Python3.7调用API批量添加资产主机到Jumpserver

Jumpserver批量添加资产并授权

调用API批量添加主机到JumpServer中

USAGE

  要用空上格式 
  暂不支持OPENSSH格式的密钥,使用 ssh-keygen -t rsa -m pem生成



grant all on *.* to lxtx@'%' identified by 'FINCy5609824hHixxxxx';


一个知识点 

网域列表

网域功能是为了解决部分环境无法直接连接而新增的功能,原理是通过网关服务器进行跳转登录。

这个功能,一般情况不用到。

30分钟连接断开问题 
在 系统设置--安全设置--连接最大空闲时间 默认的是30  可以改成你要的 

Note


注意  
问题: jumpserver error: 认证失败(用户名或密码错误
解决

系统用户用了个新的 devops  

然后这个用户添加prikey on web 

机器添加这个的pub buy 

过滤的命令  yum reboot halt  poweroff  rm 好像前几个没效果  

用户列表里的用户是登录jumpserver的,系统用户是登录到jumpserver里以后再跳到系统里去登录的用户。


Docker 安装


服务迁移

端口

    Jumpserver 默认 Web 端口为 8080/tcp, 默认 WS 端口为 8070/tcp, 配置文件 jumpserver/config.yml
    koko 默认 SSH 端口为 2222/tcp, 默认 Web Terminal 端口为 5000/tcp 配置文件在 koko/config.yml
    Guacamole 默认端口为 8081/tcp, 配置文件 /config/tomcat9/conf/server.xml
    Nginx 默认端口为 80/tcp
    Redis 默认端口为 6379/tcp
    Mysql 默认端口为 3306/tcp

ssh

ssh -p2222

sftp

sftp -P 大写的P 不是小写的p

note

 jumpserver

Django>=1.11
django-bootstrap3>=8.2.2
Pillow>=4.1.0  # 图像处理
djangorestframework>=3.6.2  # Web API
ForgeryPy  # 生成虚拟数据
#openpyxl>=2.4.0
celery>=4.0.2  # 完成异步任务
paramiko>=2.1.2  # 远程连接服务器
ansible>=2.2.2.0  # 自动化运维工具
django-simple-captcha>=0.5.5  # 验证码插件
django-formtools>=2.0  # 动态定义表单
sshpubkeys>=2.2.0
djangorestframework-bulk>=0.2.1
django-redis-cache>=1.7.1  # 缓存
requests>=2.13.0
itsdangerous>=0.24  # 加密数据
eventlet  # 以协程方式实现并发
django-filter>=1.0.2
passlib>=1.7.1  # 生成hash密文
gssapi
django-rest-swagger  # API的管理
django-auth-ldap  # 登录验证
ldap3  # 登录验证


troubleshooting

koko

Connecting to 1.231.144.243:2222...
Could not connect to '1.231.144.243' (port 2222): Connection failed.

可见 不太正常  我在海外也 telnet  2222 不通   restart 搞定 
[root@ntos ~]# telnet   127.0.0.1  2222
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Connection closed by foreign host.
[roottos ~]# docker ps 
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS                                            NAMES
f235b4dae318        jumpserver/jms_coco:1.4.9   "entrypoint.sh"     10 days ago         Up 10 days          0.0.0.0:2222->2222/tcp, 0.0.0.0:5000->5000/tcp   jms_coco
#重启这个 docker 容器正常了 
[root@tos ~]# docker restart  f235b4dae318

jumpserver 密钥不合法

上传的秘钥在生成的时候不能设置密码,否则提示秘钥不正确。

see also

使用JumpServer管理你的服务器


jumpserver 堡垒机配置使用图文详解

Jumpserver入门介绍

centos7 jumpserver安装与使用详解

快速入门


install

Docker部署JumpServer

https://docs.jumpserver.org/zh/master/install/docker_install/

Jumpserver docker搭建

jumpserver docker简单搭建

docker下jumpserver跳板机 /堡垒机详细部署


2018-ubuntu下jumpserver的安装和使用

jumpserver介绍,安装,登录,用户管理,资产管理,客户端登录jumpserver

一键安装JumpServer(堡垒机)开源版本图文详解

Usage

JumpServer简单使用


jumpserver安装后遇到的死人坑