主机管理+堡垒机系统开发:表结构设计(二)

一、创建django项目和app web

二、主机表

1、主机表代码:

    """存储所有主机"""
    hostname = models.CharField(max_length=64)
    ip_addr = models.GenericIPAddressField(unique=True)
    port = models.PositiveSmallIntegerField(default=22)
    idc = models.ForeignKey("IDC")

    enabled = models.BooleanField(default=True)
    #是否已启用,代表这台机器是否能登陆
    def __str__(self):
        return self.ip_addr

1、hostname需要唯一的?

它不一定唯一,有可能是重的

2、这台机器的用户名密码要不要在这存?

不用,因为主机和用户名密码是一对多的 关系,一条存的下吗?
是否已启用,代表这台机器是否能登陆

2、IDC表代码

class IDC(models.Model):
    name = models.CharField(max_length=64,unique=True)

    def __str__(self):
        return self.name 

三、主机组表

1、解决了什么问题:

  一个人管理500台机器我给他一个一个添加吗?,我是不是要创建一个主机组

2、主机表代码

class HostGroup(models.Model):
    """主机组"""
    name = models.CharField(max_length=64, unique=True)
    hosts  = models.ManyToManyField("Host")
    def __str__(self):
        return self.name

四、远程用户表

1、解决了什么问题:

有些远程的主机不能密钥,所以必须存密码

2、主机表代码

class RemoteUser(models.Model):
    """存储远程用户名密"""
    username = models.CharField(max_length=64)
    auth_type_choices = ((0,'ssh/password'),(1,'ssh/key'))
    auth_type = models.SmallIntegerField(choices=auth_type_choices,default=0)
    password = models.CharField(max_length=128,blank=True,null=True)

    hosts = models.ManyToManyField("Host")

    def __str__(self):
        return "%s(%s)%s" %( self.username,self.get_auth_type_display(),self.password)

3、字段设计原因

1、username要不要唯一?

  为什么不用,这个账户里面存的是多台机器的用户名密码

2、可不可以有密钥和密码?

  有些机器用密码,有些机器用密码,你总的区分吧!

3、password在这个存的是什么格式的?

  1. 存的是什么的密码?远程主机的你能在这加密吗?
  2. 你输入密码的时候输入的密文吗?你知道你机器上的密文在哪吗?你知道它的加密算法吗?
  3. 你加密了之后传给他,他认为是明文,然后他再加密一次。所以只能存明文

4、如果选择是密钥的时候?还需要存用户名和密码吗?

  不需要

六、堡垒机账户表

class UserProfile(models.Model):
	"""堡垒机的账户"""
    user = models.OneToOneField(User)
    name = models.CharField(max_length=64)
    bind_hosts = models.ManyToManyField("BindHost",blank=True)
    host_groups = models.ManyToManyField(HostGroup)
	
    def __str__(self):
        return self.name

  

原文地址:https://www.cnblogs.com/luoahong/p/9433854.html