mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-12-16 00:52:41 +00:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a114e173e0 | ||
|
|
402df81048 | ||
|
|
2a51eeef10 | ||
|
|
4b593e56f9 | ||
|
|
9f3c83b052 | ||
|
|
a864c38238 | ||
|
|
547408222d | ||
|
|
0ad26254ef | ||
|
|
b7e138f919 | ||
|
|
2ec415fd84 | ||
|
|
b3c12e8861 | ||
|
|
da8f30fc72 | ||
|
|
cddb0ce537 | ||
|
|
124e26fa32 | ||
|
|
59c689cd61 | ||
|
|
0cc36b1302 | ||
|
|
0ac9d19252 | ||
|
|
d9e497e8be | ||
|
|
e18ae7f82c | ||
|
|
e5286686b9 | ||
|
|
332316b0af | ||
|
|
8f666785d2 | ||
|
|
0ed4b84b63 | ||
|
|
97591e6f03 | ||
|
|
5d5d8ab32a | ||
|
|
5489f3ae36 | ||
|
|
ce7a3d1f33 |
@@ -522,8 +522,12 @@ class Nav(object):
|
|||||||
asset_info = get_asset_info(asset)
|
asset_info = get_asset_info(asset)
|
||||||
# 获取该资产包含的角色
|
# 获取该资产包含的角色
|
||||||
role = [str(role.name) for role in self.user_perm.get('asset').get(asset).get('role')]
|
role = [str(role.name) for role in self.user_perm.get('asset').get(asset).get('role')]
|
||||||
print line % (index, asset.ip, asset_info.get('port'),
|
try:
|
||||||
self.truncate_str(asset.hostname), str(role).replace("'", ''), asset.comment)
|
print line % (index, asset.ip, asset_info.get('port'),
|
||||||
|
self.truncate_str(asset.hostname), str(role).replace("'", ''), asset.comment)
|
||||||
|
except:
|
||||||
|
print line % (index, asset.ip, asset_info.get('port'),
|
||||||
|
self.truncate_str(asset.hostname), str(role).replace("'", ''), '')
|
||||||
print
|
print
|
||||||
|
|
||||||
def try_connect(self):
|
def try_connect(self):
|
||||||
|
|||||||
@@ -8,10 +8,18 @@ services:
|
|||||||
- "8888:80"
|
- "8888:80"
|
||||||
- "2222:22"
|
- "2222:22"
|
||||||
# environment:
|
# environment:
|
||||||
# - ENGINE=mysql
|
# - USE_MYSQL=true
|
||||||
# - MYSQL_HOST=192.168.64.5
|
# - MYSQL_ENGINE=mysql
|
||||||
|
# - MYSQL_HOST=192.168.50.143
|
||||||
# - MYSQL_PORT=3306
|
# - MYSQL_PORT=3306
|
||||||
# - MYSQL_USER=root
|
# - MYSQL_USER=jumpserver
|
||||||
# - MYSQL_PASS=love1314
|
# - MYSQL_PASS=love1314
|
||||||
# - MYSQL_NAME=jumpserver
|
# - MYSQL_NAME=jumpserver
|
||||||
# - MAIL_ENABLED=false
|
# - USE_MAIL=true
|
||||||
|
# - MAIL_ENABLED=1
|
||||||
|
# - MAIL_HOST=smtp.163.com
|
||||||
|
# - MAIL_PORT=25
|
||||||
|
# - MAIL_USER=jumpserver@163.com
|
||||||
|
# - MAIL_PASS=123456
|
||||||
|
# - MAIL_USE_TLS=False
|
||||||
|
# - MAIL_USE_SSL=False
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ port = 80
|
|||||||
log = debug
|
log = debug
|
||||||
|
|
||||||
[db]
|
[db]
|
||||||
engine = __ENGINE__
|
engine = __MYSQL_ENGINE__
|
||||||
host = __MYSQL_HOST__
|
host = __MYSQL_HOST__
|
||||||
port = __MYSQL_PORT__
|
port = __MYSQL_PORT__
|
||||||
user = __MYSQL_USER__
|
user = __MYSQL_USER__
|
||||||
password = __MYSQL_PASS__
|
password = __MYSQL_PASS__
|
||||||
database = __DATEBASE__
|
database = __MYSQL_NAME__
|
||||||
|
|
||||||
[mail]
|
[mail]
|
||||||
mail_enable = __MAIL_ENABLED__
|
mail_enable = __MAIL_ENABLED__
|
||||||
@@ -20,6 +20,7 @@ email_port = __MAIL_PORT__
|
|||||||
email_host_user = __MAIL_USER__
|
email_host_user = __MAIL_USER__
|
||||||
email_host_password = __MAIL_PASS__
|
email_host_password = __MAIL_PASS__
|
||||||
email_use_tls = __MAIL_USE_TLS__
|
email_use_tls = __MAIL_USE_TLS__
|
||||||
|
email_use_ssl = __MAIL_USE_SSL__
|
||||||
|
|
||||||
[connect]
|
[connect]
|
||||||
nav_sort_by = ip
|
nav_sort_by = ip
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ cp -r /jumpserver/install/docker/config_tmpl.conf /jumpserver/jumpserver.conf
|
|||||||
if [ ! -n "${USE_MYSQL}" ]; then
|
if [ ! -n "${USE_MYSQL}" ]; then
|
||||||
sed -i "s/__USE_MYSQL__/false/" /jumpserver/jumpserver.conf
|
sed -i "s/__USE_MYSQL__/false/" /jumpserver/jumpserver.conf
|
||||||
else
|
else
|
||||||
sed -i "s/__USE_MYSQL__/true/" /jumpserver/jumpserver.conf
|
sed -i "s/__MYSQL_ENGINE__/${MYSQL_ENGINE}/" /jumpserver/jumpserver.conf
|
||||||
sed -i "s/__MYSQL_HOST__/${MYSQL_HOST}/" /jumpserver/jumpserver.conf
|
sed -i "s/__MYSQL_HOST__/${MYSQL_HOST}/" /jumpserver/jumpserver.conf
|
||||||
sed -i "s/__MYSQL_PORT__/${MYSQL_PORT}/" /jumpserver/jumpserver.conf
|
sed -i "s/__MYSQL_PORT__/${MYSQL_PORT}/" /jumpserver/jumpserver.conf
|
||||||
sed -i "s/__MYSQL_USER__/${MYSQL_USER}/" /jumpserver/jumpserver.conf
|
sed -i "s/__MYSQL_USER__/${MYSQL_USER}/" /jumpserver/jumpserver.conf
|
||||||
@@ -11,8 +11,8 @@ sed -i "s/__MYSQL_PASS__/${MYSQL_PASS}/" /jumpserver/jumpserver.conf
|
|||||||
sed -i "s/__MYSQL_NAME__/${MYSQL_NAME}/" /jumpserver/jumpserver.conf
|
sed -i "s/__MYSQL_NAME__/${MYSQL_NAME}/" /jumpserver/jumpserver.conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -n "${MAIL_ENABLED}" ]; then
|
if [ ! -n "${USE_MAIL}" ]; then
|
||||||
sed -i "s/__MAIL_ENABLED__/false/" /jumpserver/jumpserver.conf
|
sed -i "s/__USE_MAIL__/false/" /jumpserver/jumpserver.conf
|
||||||
else
|
else
|
||||||
sed -i "s/__MAIL_ENABLED__/${MAIL_ENABLED}/" /jumpserver/jumpserver.conf
|
sed -i "s/__MAIL_ENABLED__/${MAIL_ENABLED}/" /jumpserver/jumpserver.conf
|
||||||
sed -i "s/__MAIL_HOST__/${MAIL_HOST}/" /jumpserver/jumpserver.conf
|
sed -i "s/__MAIL_HOST__/${MAIL_HOST}/" /jumpserver/jumpserver.conf
|
||||||
@@ -25,7 +25,11 @@ sed -i "s/__MAIL_USE_TLS__/false/" /jumpserver/jumpserver.conf
|
|||||||
else
|
else
|
||||||
sed -i "s/__MAIL_USE_TLS__/${MAIL_USE_TLS}/" /jumpserver/jumpserver.conf
|
sed -i "s/__MAIL_USE_TLS__/${MAIL_USE_TLS}/" /jumpserver/jumpserver.conf
|
||||||
fi
|
fi
|
||||||
|
if [ ! -n "${MAIL_USE_SSL}" ]; then
|
||||||
|
sed -i "s/__MAIL_USE_SSL__/false/" /jumpserver/jumpserver.conf
|
||||||
|
else
|
||||||
|
sed -i "s/__MAIL_USE_SSL__/${MAIL_USE_SSL}/" /jumpserver/jumpserver.conf
|
||||||
|
fi
|
||||||
if [ ! -f "/etc/ssh/sshd_config" ]; then
|
if [ ! -f "/etc/ssh/sshd_config" ]; then
|
||||||
cp -r /jumpserver/install/docker/sshd_config /etc/ssh/sshd_config
|
cp -r /jumpserver/install/docker/sshd_config /etc/ssh/sshd_config
|
||||||
fi
|
fi
|
||||||
@@ -42,12 +46,16 @@ if [ ! -f "/etc/ssh/ssh_host_ed25519_key" ]; then
|
|||||||
ssh-keygen -t ed25519 -b 1024 -f /etc/ssh/ssh_host_ed25519_key -N ''
|
ssh-keygen -t ed25519 -b 1024 -f /etc/ssh/ssh_host_ed25519_key -N ''
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# handle empty data directory
|
||||||
|
mkdir -p /data/logs
|
||||||
|
|
||||||
/usr/sbin/sshd -E /data/logs/jumpserver.log
|
/usr/sbin/sshd -E /data/logs/jumpserver.log
|
||||||
python /jumpserver/manage.py syncdb --noinput
|
python /jumpserver/manage.py syncdb --noinput
|
||||||
if [ ! -f "/home/init.locked" ]; then
|
if [ ! -f "/home/init.locked" ]; then
|
||||||
python manage.py loaddata install/initial_data.yaml
|
python /jumpserver/manage.py loaddata install/initial_data.yaml
|
||||||
date > /home/init.locked
|
date > /home/init.locked
|
||||||
fi
|
fi
|
||||||
python /jumpserver/run_server.py >> /data/logs/jumpserver.log &
|
python /jumpserver/manage.py crontab add >> /data/logs/jumpserver.log &
|
||||||
|
python /jumpserver/run_server.py >> /dev/null &
|
||||||
chmod -R 777 /data/logs/jumpserver.log
|
chmod -R 777 /data/logs/jumpserver.log
|
||||||
tail -f /data/logs/jumpserver.log
|
tail -f /data/logs/jumpserver.log
|
||||||
|
|||||||
@@ -85,12 +85,12 @@ class PreSetup(object):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def _is_redhat(self):
|
def _is_redhat(self):
|
||||||
if self.dist.startswith("centos") or self.dist.startswith("red") or self.dist == "fedora" or self.dist == "amazon linux ami":
|
if self.dist.startswith("centos") or self.dist.startswith("red") or self.dist == "fedora" or self.dist == "oracle" or self.dist == "amazon linux ami":
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _is_centos7(self):
|
def _is_centos7(self):
|
||||||
if self.dist.startswith("centos") and self.version.startswith("7"):
|
if self.dist.startswith("centos") or self.dist.startswith("centos linux") and self.version.startswith("7"):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -104,8 +104,8 @@ class PreSetup(object):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def check_platform(self):
|
def check_platform(self):
|
||||||
if not (self._is_redhat or self._is_ubuntu):
|
if not (self._is_redhat or self._is_ubuntu or self._is_centos7):
|
||||||
print(u"支持的平台: CentOS, RedHat, Fedora, Debian, Ubuntu, Amazon Linux, 暂不支持其他平台安装.")
|
print(u"支持的平台: CentOS, RedHat, Fedora, Oracle Linux, Debian, Ubuntu, Amazon Linux, 暂不支持其他平台安装.")
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|||||||
@@ -409,6 +409,17 @@ class MyTask(MyRunner):
|
|||||||
self.run("script", module_args1, become=True)
|
self.run("script", module_args1, become=True)
|
||||||
return self.results
|
return self.results
|
||||||
|
|
||||||
|
def recyle_cmd_alias(self, role_name):
|
||||||
|
"""
|
||||||
|
recyle sudo cmd alias
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
if role_name == 'root':
|
||||||
|
return {"status": "failed", "msg": "can't recyle root privileges"}
|
||||||
|
module_args = "sed -i 's/^%s.*//' /etc/sudoers" % role_name
|
||||||
|
self.run("command", module_args, become=True)
|
||||||
|
return self.results
|
||||||
|
|
||||||
|
|
||||||
class CustomAggregateStats(callbacks.AggregateStats):
|
class CustomAggregateStats(callbacks.AggregateStats):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ def perm_rule_detail(request):
|
|||||||
return my_render('jperm/perm_rule_detail.html', locals(), request)
|
return my_render('jperm/perm_rule_detail.html', locals(), request)
|
||||||
|
|
||||||
|
|
||||||
|
@require_role('admin')
|
||||||
def perm_rule_add(request):
|
def perm_rule_add(request):
|
||||||
"""
|
"""
|
||||||
add rule page
|
add rule page
|
||||||
@@ -533,6 +534,8 @@ def perm_role_push(request):
|
|||||||
sudo_list = set([sudo for sudo in role.sudo.all()]) # set(sudo1, sudo2, sudo3)
|
sudo_list = set([sudo for sudo in role.sudo.all()]) # set(sudo1, sudo2, sudo3)
|
||||||
if sudo_list:
|
if sudo_list:
|
||||||
ret['sudo'] = task.push_sudo_file([role], sudo_list)
|
ret['sudo'] = task.push_sudo_file([role], sudo_list)
|
||||||
|
else:
|
||||||
|
ret['sudo'] = task.recyle_cmd_alias(role.name)
|
||||||
|
|
||||||
logger.debug('推送role结果: %s' % ret)
|
logger.debug('推送role结果: %s' % ret)
|
||||||
success_asset = {}
|
success_asset = {}
|
||||||
@@ -576,7 +579,7 @@ def perm_role_push(request):
|
|||||||
if not failed_asset:
|
if not failed_asset:
|
||||||
msg = u'系统用户 %s 推送成功[ %s ]' % (role.name, ','.join(success_asset.keys()))
|
msg = u'系统用户 %s 推送成功[ %s ]' % (role.name, ','.join(success_asset.keys()))
|
||||||
else:
|
else:
|
||||||
error = u'系统用户 %s 推送失败 [ %s ], 推送成功 [ %s ] 进入系统用户详情,查看失败原因' % (role.name,
|
error = u'系统用户 %s 推送失败 [ %s ], 推送成功 [ %s ] 请点系统用户->点对应名称->点失败,查看失败原因' % (role.name,
|
||||||
','.join(failed_asset.keys()),
|
','.join(failed_asset.keys()),
|
||||||
','.join(success_asset.keys()))
|
','.join(success_asset.keys()))
|
||||||
return my_render('jperm/perm_role_push.html', locals(), request)
|
return my_render('jperm/perm_role_push.html', locals(), request)
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ def server_add_user(username, ssh_key_pwd=''):
|
|||||||
add a system user in jumpserver
|
add a system user in jumpserver
|
||||||
在jumpserver服务器上添加一个用户
|
在jumpserver服务器上添加一个用户
|
||||||
"""
|
"""
|
||||||
bash("adduser -s '%s' '%s'" % (os.path.join(BASE_DIR, 'init.sh'), username))
|
bash("useradd -s '%s' '%s'" % (os.path.join(BASE_DIR, 'init.sh'), username))
|
||||||
gen_ssh_key(username, ssh_key_pwd)
|
gen_ssh_key(username, ssh_key_pwd)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ from django.shortcuts import get_object_or_404
|
|||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from juser.user_api import *
|
from juser.user_api import *
|
||||||
from jperm.perm_api import get_group_user_perm
|
from jperm.perm_api import get_group_user_perm
|
||||||
|
import re
|
||||||
|
|
||||||
MAIL_FROM = EMAIL_HOST_USER
|
MAIL_FROM = EMAIL_HOST_USER
|
||||||
|
|
||||||
@@ -142,7 +143,7 @@ def user_add(request):
|
|||||||
group_all = UserGroup.objects.all()
|
group_all = UserGroup.objects.all()
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
username = request.POST.get('username', '')
|
username = request.POST.get('username', '')
|
||||||
password = PyCrypt.gen_rand_pass(16)
|
password = PyCrypt.gen_rand_pass(16)
|
||||||
name = request.POST.get('name', '')
|
name = request.POST.get('name', '')
|
||||||
email = request.POST.get('email', '')
|
email = request.POST.get('email', '')
|
||||||
@@ -159,15 +160,23 @@ def user_add(request):
|
|||||||
if '' in [username, password, ssh_key_pwd, name, role]:
|
if '' in [username, password, ssh_key_pwd, name, role]:
|
||||||
error = u'带*内容不能为空'
|
error = u'带*内容不能为空'
|
||||||
raise ServerError
|
raise ServerError
|
||||||
|
|
||||||
check_user_is_exist = User.objects.filter(username=username)
|
check_user_is_exist = User.objects.filter(username=username)
|
||||||
if check_user_is_exist:
|
if check_user_is_exist:
|
||||||
error = u'用户 %s 已存在' % username
|
error = u'用户 %s 已存在' % username
|
||||||
raise ServerError
|
raise ServerError
|
||||||
|
|
||||||
|
if username in ['root']:
|
||||||
|
error = u'用户不能为root'
|
||||||
|
raise ServerError
|
||||||
|
|
||||||
except ServerError:
|
except ServerError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
|
if not re.match(r"^\w+$",username):
|
||||||
|
error = u'用户名不合法'
|
||||||
|
raise ServerError(error)
|
||||||
user = db_add_user(username=username, name=name,
|
user = db_add_user(username=username, name=name,
|
||||||
password=password,
|
password=password,
|
||||||
email=email, role=role, uuid=uuid_r,
|
email=email, role=role, uuid=uuid_r,
|
||||||
|
|||||||
@@ -416,7 +416,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
|
|||||||
data = ''
|
data = ''
|
||||||
pre_timestamp = time.time()
|
pre_timestamp = time.time()
|
||||||
while True:
|
while True:
|
||||||
r, w, e = select.select([self.channel, sys.stdin], [], [])
|
r, w, e = select.select([self.channel], [], [])
|
||||||
if self.channel in r:
|
if self.channel in r:
|
||||||
recv = self.channel.recv(1024)
|
recv = self.channel.recv(1024)
|
||||||
if not len(recv):
|
if not len(recv):
|
||||||
@@ -494,7 +494,7 @@ def main():
|
|||||||
[
|
[
|
||||||
(r'/ws/monitor', MonitorHandler),
|
(r'/ws/monitor', MonitorHandler),
|
||||||
(r'/ws/terminal', WebTerminalHandler),
|
(r'/ws/terminal', WebTerminalHandler),
|
||||||
(r'/kill', WebTerminalKillHandler),
|
(r'/ws/kill', WebTerminalKillHandler),
|
||||||
(r'/ws/exec', ExecHandler),
|
(r'/ws/exec', ExecHandler),
|
||||||
(r"/static/(.*)", tornado.web.StaticFileHandler,
|
(r"/static/(.*)", tornado.web.StaticFileHandler,
|
||||||
dict(path=os.path.join(os.path.dirname(__file__), "static"))),
|
dict(path=os.path.join(os.path.dirname(__file__), "static"))),
|
||||||
|
|||||||
@@ -28,6 +28,11 @@ PROC_NAME="jumpserver"
|
|||||||
lockfile=/var/lock/subsys/${PROC_NAME}
|
lockfile=/var/lock/subsys/${PROC_NAME}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
|
if [ $(whoami) != 'root' ];then
|
||||||
|
echo "Sorry, JMS must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
jump_start=$"Starting ${PROC_NAME} service:"
|
jump_start=$"Starting ${PROC_NAME} service:"
|
||||||
if [ -f $lockfile ];then
|
if [ -f $lockfile ];then
|
||||||
echo -n "jumpserver is running..."
|
echo -n "jumpserver is running..."
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ WSSHClient.prototype._generateEndpoint = function (options) {
|
|||||||
var protocol = 'ws://';
|
var protocol = 'ws://';
|
||||||
}
|
}
|
||||||
|
|
||||||
var endpoint = protocol + document.URL.match(RegExp('//(.*?)/'))[1] + '/ws/terminal' + document.URL.match(/(\?.*)/);
|
var endpoint = protocol + document.URL.match(RegExp('//(.*?)/'))[1] + '/ws/terminal' + document.URL.match(/\?.*/);
|
||||||
return endpoint;
|
return endpoint;
|
||||||
};
|
};
|
||||||
WSSHClient.prototype.connect = function (options) {
|
WSSHClient.prototype.connect = function (options) {
|
||||||
@@ -151,4 +151,4 @@ $(document).ready(function () {
|
|||||||
$(".terminal").mouseenter(function () {
|
$(".terminal").mouseenter(function () {
|
||||||
$(".termChangBar").slideUp();
|
$(".termChangBar").slideUp();
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -215,7 +215,7 @@
|
|||||||
|
|
||||||
function cut(num, login_type){
|
function cut(num, login_type){
|
||||||
var protocol = window.location.protocol;
|
var protocol = window.location.protocol;
|
||||||
var endpoint = protocol + '//' + document.URL.match(RegExp('//(.*?)/'))[1] + '/kill';
|
var endpoint = protocol + '//' + document.URL.match(RegExp('//(.*?)/'))[1] + '/ws/kill';
|
||||||
if (login_type=='web'){
|
if (login_type=='web'){
|
||||||
var g_url = endpoint + '?id=' + num;
|
var g_url = endpoint + '?id=' + num;
|
||||||
console.log(g_url);
|
console.log(g_url);
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
<label for="role_name" class="col-sm-2 control-label">用户名称<span class="red-fonts">*</span></label>
|
<label for="role_name" class="col-sm-2 control-label">用户名称<span class="red-fonts">*</span></label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="role_name" name="role_name" placeholder="Role Name" type="text" class="form-control">
|
<input id="role_name" name="role_name" placeholder="Role Name" type="text" class="form-control">
|
||||||
|
<span class="help-block m-b-none">如果客户端是网络设备,填写已配置的SSH登录用户,支持SSH协议V2.0以上 </span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="hr-line-dashed"></div>
|
<div class="hr-line-dashed"></div>
|
||||||
@@ -44,7 +45,7 @@
|
|||||||
<label for="role_password" class="col-sm-2 control-label">用户密码</label>
|
<label for="role_password" class="col-sm-2 control-label">用户密码</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="role_password" name="role_password" placeholder="Role Password" type="password" class="form-control">
|
<input id="role_password" name="role_password" placeholder="Role Password" type="password" class="form-control">
|
||||||
<span class="help-block m-b-none">如果不添加密码,会自动生成</span>
|
<span class="help-block m-b-none">如果客户端是网络设备这里必填,如果客户端是服务器,密码不会被推送,不会修改客户端原有的用户密码,请忽略这里</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
|||||||
@@ -66,10 +66,11 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="j_group" class="col-sm-2 control-label">使用密钥</label>
|
<label for="j_group" class="col-sm-2 control-label">使用密钥</label>
|
||||||
<div class="col-sm-1">
|
<div class="col-sm-8">
|
||||||
<div class="radio i-checks">
|
<div class="radio i-checks">
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" value="1" id="use_publicKey" name="use_publicKey" checked>
|
<input type="checkbox" value="1" id="use_publicKey" name="use_publicKey" checked>
|
||||||
|
<span class="help-block m-b-none">如果资产是网络设备,请取消复选框(模拟推送),如果资产是服务器,要选种复选框 </span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ $('#userForm').validator({
|
|||||||
timely: 2,
|
timely: 2,
|
||||||
theme: "yellow_right_effect",
|
theme: "yellow_right_effect",
|
||||||
rules: {
|
rules: {
|
||||||
|
check_name: [/(?!^root$)^[\w.]{2,20}$/i, '大小写字母数字和下划线小数点,2-20位,并且非root'],
|
||||||
check_username: [/^[\w.]{3,20}$/, '大小写字母数字和下划线小数点'],
|
check_username: [/^[\w.]{3,20}$/, '大小写字母数字和下划线小数点'],
|
||||||
type_m: function(element){
|
type_m: function(element){
|
||||||
return $("#M").is(":checked");
|
return $("#M").is(":checked");
|
||||||
@@ -133,7 +134,7 @@ $('#userForm').validator({
|
|||||||
},
|
},
|
||||||
fields: {
|
fields: {
|
||||||
"username": {
|
"username": {
|
||||||
rule: "required;check_username",
|
rule: "required;check_username;check_name",
|
||||||
tip: "输入用户名",
|
tip: "输入用户名",
|
||||||
ok: "",
|
ok: "",
|
||||||
msg: {required: "必须填写!"}
|
msg: {required: "必须填写!"}
|
||||||
@@ -174,4 +175,4 @@ $('#userForm').validator({
|
|||||||
{#})#}
|
{#})#}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
<input name="setting" value="default" style="display: none">
|
<input name="setting" value="default" style="display: none">
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="username" name="username" placeholder="Username" type="text" value="{{ setting_default.field1 }}" class="form-control">
|
<input id="username" name="username" placeholder="Username" type="text" value="{{ setting_default.field1 }}" class="form-control">
|
||||||
<span class="help-block m-b-none"> 管理账号是服务器存在的root等高权限账号(或拥有NOPASSWD: ALL sudo权限),用来推送新建系统用户</span>
|
<span class="help-block m-b-none"> 管理用户是指客户端上的如root等高权限账号(或拥有NOPASSWD: ALL sudo权限),用来推送新建系统用户</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="hr-line-dashed"></div>
|
<div class="hr-line-dashed"></div>
|
||||||
@@ -147,4 +147,4 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Reference in New Issue
Block a user