1. 程式人生 > >主機管理+堡壘機系統開發:表結構設計

主機管理+堡壘機系統開發:表結構設計

bsp http __str__ ipaddress color user del splay group

一、創建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、如果選擇是密鑰的時候?還需要存用戶名和密碼嗎?

  不需要

六、堡壘機賬戶表

主機管理+堡壘機系統開發:表結構設計