OpenStack 映象製作之cloud-init

CL.TANG發表於2016-10-18
Contents [hide]

背景

前面我們製作了映象,並且製作的映象支援了硬碟的自定義。但是還不夠,我們要映象支援密碼注入,支援金鑰登入。並且2種登入方式都支援(金鑰登入,密碼登入)

金鑰登入

金鑰登入的原理

 我們在linux中使用ssh-keygen命令,將在當前使用者的預設路徑生成.ssh資料夾,並且在該資料夾下存在id_rsa和id_rsa.pub檔案,其中id_rsa.pub就是公鑰檔案,而id_rsa為私鑰檔案,我們將id_rsa傳入到客戶端機器,並且按照/etc/ssh/sshd_config中檔案的#AuthorizedKeysFile .ssh/authorized_keys 內容,將id_rsa.pub改為id_rsa,那麼在客戶端使用私鑰id_rsa時就可以不用密碼登入了。

openstack的私鑰

  openstack也是使用該原理,生成一對鑰匙檔案,將公鑰注入到虛擬機器裡的預設用的.ssh/目錄下,在dashboard介面下載到私鑰檔案,在建立虛擬機器的時候呼叫注入key_file介面,就可以實現無密碼登入了。

密碼注入 =

  對於openstack的虛擬例項來說,所謂注入,是將我們輸入的密碼在計算節點使用nova-compute做加密處理後生成一對類似/etc/passwd和/etc/shadow的內容的字串,然後使用vfs型別資料對建立的image進行資料替換。達到密碼修改的目的。

實際遇到的情況

  密碼注入後使用ssh不能登陸,使用證照登入後檢視/var/log/secure內容也顯示密碼不正確。另外證照登入也不是想要的root使用者,而提示是cloud-user.即不滿足使用root使用者密碼登入,不滿足使用root金鑰登入

解決辦法

  金鑰登入:主要原因是我們使用cloud-init的配置檔案中配置了預設使用者為cloud-user,所以在注入金鑰的時候也注入到了cloud-user
system_info:
   distro: rhel
   default_user:
      name: cloud-user
   paths:
      cloud_dir: /var/lib/cloud
      templates_dir: /etc/cloud/templates
      ssh_svcname: sshd

將name:cloud-user修改為name:root,則可以實現使用者以root使用者金鑰登入。

密碼root登入

  在完成金鑰登入後,注入密碼方式始終不能登入。日誌跟蹤,將計算節點的/usr/lib/python/site-package/nova/virt/下的列印也加上:
<0>Oct 17 05:53:22 node-12 ?182>nova-nova.virt.disk.api INFO: admin_pass:root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
<0>Oct 17 05:53:22 node-12 ?182>nova-nova.virt.disk.api INFO: admin_pass:root:$1$CaW09rpP$QP631qFmr7vRL.D95sS4C/:16360:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::
halt:*:15980:0:99999:7:::
mail:*:15980:0:99999:7:::
uucp:*:15980:0:99999:7:::
operator:*:15980:0:99999:7:::
games:*:15980:0:99999:7:::
gopher:*:15980:0:99999:7:::
ftp:*:15980:0:99999:7:::
nobody:*:15980:0:99999:7:::
vcsa:!!:16357::::::
saslauth:!!:16357::::::
postfix:!!:16357::::::
sshd:!!:16357::::::

發現我們的金鑰生成為一組檔案替換到映象中的密碼檔案,生成虛擬機器後檢視/etc/shadow的密碼也差不多相同

admin_pass:root:!!$1$CaW09rpP$QP631qFmr7vRL.D95sS4C/:16360:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::
halt:*:15980:0:99999:7:::
mail:*:15980:0:99999:7:::
uucp:*:15980:0:99999:7:::
operator:*:15980:0:99999:7:::
games:*:15980:0:99999:7:::
gopher:*:15980:0:99999:7:::
ftp:*:15980:0:99999:7:::
nobody:*:15980:0:99999:7:::
vcsa:!!:16357::::::
saslauth:!!:16357::::::
postfix:!!:16357::::::
sshd:!!:16357::::::

主要不同是root:後面多了2個!!,表示使用了passwd -l root,將root使用者鎖定了。 分析應該是cloud-init在啟動後做了鎖定的工作,參閱cloud-init配置檔案,可以看到配置檔案中加上lock_passwd:False就可以了

相關文章