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

1、建立django项目和app web

2、主机表

一、主机表代码:

    """存储全部主机"""
    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

一、hostname须要惟一的?python

它不必定惟一,有多是重的web

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

不用,由于主机和用户名密码是一对多的 关系,一条存的下吗?
是否已启用,表明这台机器是否能登录django

二、IDC表代码

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

    def __str__(self):
        return self.name 

3、主机组表

一、解决了什么问题:

  一我的管理500台机器我给他一个一个添加吗?,我是否是要建立一个主机组app

二、主机表代码

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

4、远程用户表

一、解决了什么问题:

有些远程的主机不能密钥,因此必须存密码ssh

二、主机表代码

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)

三、字段设计缘由

一、username要不要惟一?加密

  为何不用,这个帐户里面存的是多台机器的用户名密码spa

二、可不能够有密钥和密码?设计

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

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

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

四、若是选择是密钥的时候?还须要存用户名和密码吗?

  不须要

6、堡垒机帐户表

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
相关文章
相关标签/搜索