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就可以了