django生成ssh-token 在内网运作吧。

1.在前端生成ssh-token ----根据用户名查询是否有这个用户,如果有 取得数据库密码(AES)  +时间段 进行加密码(AES)

image

2.生成的ssk-token 一分钟内有效 ,如果超过一分钟则返回ssh 失败

image

如果 一分钟内,则用户名与ssk-token 验证通过

image

代码:

展示逻辑

1.前端

image


2.view:

image


产生 ssh-token逻辑

1.前端

image

image


2.view:

简单地用aes+时间来生成串 防止密码漏。

image

webssh项目修改handle.py

handle.py


from Cryptodome.Cipher import AES
from Cryptodome import Random
from binascii import b2a_hex ,  a2b_hex
import time


data:要加密的数据
key_16:密钥
iv:密钥向量
'''
def encrypt(data,key_16,iv_16):
     AES_LENGTH = 16

    #iv = Random.new().read(AES.block_size)
     mycipher = AES.new(key_16, AES.MODE_CFB, iv_16)
     ciphertext = iv_16 + mycipher.encrypt(data.encode())
     #print '加密后数据为:', b2a_hex(ciphertext)[16:]
     #print '解密后数据为:', decrypttext.decode()
     ## 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
     return b2a_hex(ciphertext)
'''AES解密

data加密数据 是b2a_hex 16进制
key_16:密钥
iv_16:密钥向量
key_16 iv_16要与 加密 时用的一致
'''
def decrypt(data,key_16,iv_16):
     #print 'data:',len(data)
     mydecrypt = AES.new(key_16, AES.MODE_CFB, iv_16)
     decrypttext = mydecrypt.decrypt(a2b_hex(data)[16:])
     return  decrypttext.decode()





def get_args(self):
     hostname = self.get_hostname()
     port = self.get_port()
     if isinstance(self.policy, paramiko.RejectPolicy):
         self.lookup_hostname(hostname, port)
     username = self.get_value('username')
     password = self.get_argument('password', u'')
     #xiao
     if password:
         #do not modify  this key_id and iv_16 contents
         key_16 = b'aaaaajpSZlVAmkxh9'
         iv_16 = b'bbbbbqdz1aFuAHi'
         destr=decrypt(password,key_16,iv_16)
         #print "all 解密后的数据<ssh>:",destr
         destr_arr=destr.split('@')
         p_time=int(destr_arr[-1])
         nowtime = int(time.time())
         if nowtime - p_time >60:
             raise ValueError('ssh token expired!!')
         if len(destr_arr)>2:

            password = ('@'.join(destr_arr[0:len(destr_arr)-1])).rstrip()
         else:
             password = destr_arr[0].rstrip()

       # print "aaaaaaa:",password,str(p_time)

转载于:https://www.cnblogs.com/xiaocry/articles/11290031.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值