Jumpserver 自定义邮件内容
2016-05-12 16:37:48
通过前几次的测试,把jumpserver用于生产环境了,询问同事都觉得还挺方便便捷的,不过发现系统自动发送的邮件URL地址貌似有问题
系统自动发送的邮件内容如下

明显是个内网地址,而且不带端口号,就算在内网中直接点击也打不开该地址!总不能挨个通知用户URL地址吧,还好这个是开源软件,可以直接修改源代码。
进入jumpserver的安装目录
cd /opt/jumpserver/
查找带有“您的用户名”的这个文件
grep -r 您的用户名 /opt/jumpserver/

明显这个邮件是通过user_api.py这个文件发出来的
编辑该文件
vi juser/user_api.py
输入 /您的用户名 查找该行的位置
def user_add_mail(user, kwargs):
“”"
adduser send mail
发送用户添加邮件
“”"
user_role= {‘SU’: u’超级管理员’, ‘GA’: u’组管理员’, ‘CU’: u’普通用户’}
mail_title= u’恭喜你的跳板机用户 %s 添加成功 Jumpserver’ % user.name
mail_msg= u"""
Hi,%s
您的用户名:%s
您的权限:%s
您的web登录密码:%s
您的ssh密钥文件密码:%s
密钥下载内网地址: %s:8000/juser/key/down/?uuid=%s
密钥下载外网地址: http://117.78.38.102:8000/juser/key/down/?uuid=%s
说明:请登陆跳板机后台下载密钥, 然后使用密钥登陆跳板机!
“”"% (user.name, user.username, user_role.get(user.role, u’普通用户’),
kwargs.get(‘password’),kwargs.get(‘ssh_key_pwd’), URL, user.uuid, user.uuid)
send_mail(mail_title,mail_msg, MAIL_FROM, [user.email], fail_silently=False)
红色部分为我添加的代码。继续搜索发下面还有相关定义的代码
def get_display_msg(user, password=’’, ssh_key_pwd=’’, send_mail_need=False):
ifsend_mail_need:
msg= u’添加用户 %s 成功! 用户密码已发送到 %s 邮箱!’ % (user.name, user.email)
else:
msg= u"""
跳板机内网地址: %s
跳板机外网地址: http://117.78.38.102
用户名:%s
密码:%s
密钥密码:%s
密钥下载内网url:%s:8000/juser/key/down/?uuid=%s
密钥下载外网url: http://117.78.38.102:8000/juser/key/down/?uuid=%s
该账号密码可以登陆web和跳板机。
“”"% (URL, URL, user.username, password, ssh_key_pwd, URL, user.uuid, user.uuid)
return msg
以上代码经过十轮测试,得以实现自己想要的功能
然后删除 rm -f /opt/jumpserver/juser/user_api.pyc
重启服务 /opt/jumpserver/service.sh restart
再次创建发送的通知邮件内容如下,发送邮件内容正常。

继续测试,点击发送Email

内容如下

通过查找文件发现还是在view.py这个文件中
@require_role(‘admin’)
def send_mail_retry(request):
uuid_r= request.GET.get(‘uuid’, ‘1’)
user= get_object(User, uuid=uuid_r)
msg= u"""
跳板机地址:%s
用户名:%s
重设密码
内网用户请访问:%s:8000/juser/password/forget/
外网用户请访问:http://117.78.38.102:8000/juser/password/forget/
请登录web点击个人信息页面重新生成ssh密钥
“”"% (URL, user.username, URL)
try:
send_mail(u’邮件重发’,msg, MAIL_FROM, [user.email], fail_silently=False)
exceptIndexError:
returnHttp404
returnHttpResponse(‘发送成功’)
接着测试,发现登录的时候点击忘记密码发送的邮件内容如下


填入信息后发送邮件内如下

继续查找文件

@defend_attack
def forget_password(request):
ifrequest.method == ‘POST’:
defend_attack(request)
email= request.POST.get(‘email’, ‘’)
username= request.POST.get(‘username’, ‘’)
name= request.POST.get(‘name’, ‘’)
user= get_object(User, username=username, email=email, name=name)
ifuser:
timestamp= int(time.time())
hash_encode= PyCrypt.md5_crypt(str(user.uuid) + str(timestamp) + KEY)
msg= u"""
Hi%s, 请点击下面链接重设密码!
内网用户: %s:8000/juser/password/reset/?uuid=%s×tamp=%s&hash=%s
外网用户:http://117.78.38.102:8000/juser/password/reset/?uuid=%s×tamp=%s&hash=%s
“”"% (user.name, URL, user.uuid, timestamp, hash_encode ,user.uuid, timestamp, hash_encode)
send_mail(‘忘记跳板机密码’,msg, MAIL_FROM, [email], fail_silently=False)
msg= u’请登陆邮箱,点击邮件重设密码’
returnhttp_success(request, msg)
else:
error= u’用户不存在或邮件地址错误’
returnrender_to_response(‘juser/forget_password.html’, locals())
经过大概十轮测试,最终代码如上,发送的邮件内如下。找回密码功能正常!!

继续测试,修改用户资料后,发送邮件通知用户

获取邮件如下:

if email_need:
msg= u"""
Hi%s:
您的信息已修改,请登录跳板机查看详细信息
内网地址:%s:8000
外网地址:http://117.78.38.102:8000/
用户名:%s
密码:%s(如果密码为None代表密码为原密码)
权限::%s
“”"% (user.name, URL, user.username, password, user_role.get(role_post, u’’))
send_mail(‘您的信息已修改’,msg, MAIL_FROM, [email], fail_silently=False)
returnHttpResponseRedirect(reverse(‘user_list’))
return my_render(‘juser/user_edit.html’, locals(), request)
修改代码后获得的邮件
评论(0)
本文讲述了如何修改Jumpserver的源代码,解决邮件中内网URL问题,并自定义用户添加、密码重置和资料修改通知。作者详细记录了修改user_api.py和view.py中的代码过程,确保邮件内容指向正确并符合实际需求。
600

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



