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

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
相關文章
相關標籤/搜索