當前位置:
首頁 > 最新 > 關於虛擬機密碼你所有需要知道的一切

關於虛擬機密碼你所有需要知道的一切

雖然各種雲的虛擬機都推薦使用 SSH 密鑰登錄,但是還是有很多人喜歡使用密碼登錄,而且有的時候需要通過 console 來登錄系統。那麼如何更好的設置、修改虛擬機的密碼呢?本文以 OpenStack 為例,介紹如何設置及修改虛擬機改密碼。

內置密碼

這是最簡單的,製作鏡像的時候,直接給 root 賬號配置一個密碼。但是問題也不言而喻。所有的示例都有相同的默認密碼,如果用戶忘記改的話,其它人很容易的就能掃到你的機器,從而登錄你的機器。

啟動的時候通過 libvirt 進行密碼注入

方法是在 裡面開始如下配置

在虛擬機啟動的時候,通過 傳入一個指定的密碼。但是這個方法也有一系列的問題:

所以這個方法也不是推薦使用,更詳細的信息,可能參看我另一篇文章「rbd 是否支持注入」。

通過 metadata api 注入

cloud-init 這個服務是從 AWS 學來的。它安裝在虛擬機中,在啟動虛擬機時,做一些初始化工作。如:硬碟分區自動擴展,SSH Public Key 注入,用戶創建等。用戶甚至可以注入一些 shell 腳本到虛擬機中運行。在自動化方便啟了很大的作用。Heat 的實現就依賴於 cloud-init 服務。

在 OpenStack 上,cloud-init 應該從 http://169.254.169.254 去拿到所需要的信息。而這個服務是通過 iptables 轉到了 neutron-metadata-agent 服務上

通過 cloud-init 注入也有幾種方式,下面分別來說明。

腳本

因為在虛擬機啟動的時候,是可以傳入 shell 腳本的 user_data,所以可以在這個 shell 腳本裡面修改 root 密碼。

cloud init configuration

user data 也可以是 cloud-init 支持的一個 yaml 結構文件,所以還可以通過如下方式改密碼

這種方式要比「腳本」的方法優雅一些,推薦使用。而且cloud-init 本身功能很強大,值得深入挖掘下。

config drive

默認情況下,metadata api 是通過 這個地址獲取元數據信息。此外,nova 也支持使用 disk 的方式傳入元數據。方便在網路環境不允許 metadata api 的情況下使用。性能也比 metadata api 好的多。

config drive 的開啟方法是在 中配置:

或在啟動虛擬機的時候,加上如下參數:

開啟 config drive 後,除了上面提到的「腳本」和「cloud init configuration」方式,還可以使用 nova 的 參數。雖然這時密碼是注入到了虛擬中,但是 cloud init 並不支持讀取這裡的密碼,所以會失敗。不過可以修改下 cloud init 支持這種方式。具體更多信息參看[1]。

通過 nova set-password

nova 還支持通過 libvirt 的 set-user-password 介面來修改正在運行的虛擬的密碼。這個介面本質上是通過 qemu-guest-agent 的 介面來修改密碼。所以對 libvirt 及 qemu-guest-agent 的版本都有要求。

現在看支持的 Guest 操作系統如下:

值的一提的是 CentOS 6 雖然用的 qemu-guest-agent 版本是 ,但是紅帽已經把相關 patch backport 了回頭,所以也是支持。

使用方法如下:

虛擬機自動生成加密密碼

很早之前,nova 還支持了虛擬機生成密碼,然後加密後傳回 nova 的功能[4]。其原理如下:

因為密鑰對等加密原因,除了「1」「5」可以看到明文密碼外,其它步驟裡面都是加密的。所以這種方式可以說是最安全的方案。連雲平台提供傷都不能看到真正的密碼。

不過這種方式只在 Windows 的 cloud init 版本 cloudbase-init 裡面有實現[5]。Linux 版本的 cloud-init 並不支持。不過 Github 上面找到一個類似的實現[6],雖然只支持 RHEL 7, 但是有需要的話,可以參考修改下。

如果我忘記了虛擬機密碼怎麼辦

如果以上都不滿足,就需要手動重置 root 密碼,基本思路是在 Linux 啟動的時候,進入一個不需要密碼登錄的環境,然後修改 root 密碼,步驟如下

REF

[1] http://niusmallnan.com/_build/html/_templates/openstack/inject_passwd.html#cloud-init

[2] https://github.com/qemu/qemu/commit/215a2771a7b6b29037ee8deba484815d816b6fdd

[3] https://github.com/qemu/qemu/commit/259434b8067e1c61017e9a5b8667b6526b474ff2

[4] https://review.openstack.org/#/c/17274/

[5] https://github.com/openstack/cloudbase-init/blob/master/cloudbaseinit/metadata/services/httpservice.py

[6] https://github.com/vvaldez/openstack-password-reset

[7] https://zhangchenchen.github.io/2017/01/19/openstack-reset-instance-password

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

天野春子:世界上最好的地方,是故鄉
在你的城市裡呼吸

TAG:全球大搜羅 |