問題描述
《Ubuntu16手動安裝OpenStack——horizon篇》一文中泳猬,已經(jīng)安裝了horizon戚长,并且在dashboard中使用官方鏡像創(chuàng)建了ubuntu16實(shí)例盗冷。看上去同廉,很成功仪糖。
但是,再次使用官方鏡像創(chuàng)建實(shí)例迫肖,這次居然無法通過ssh密鑰訪問9啊!蟆湖!Permission denied (publickey). 神奇了故爵。。隅津。
重建實(shí)例诬垂,依然無法通過密鑰訪問。本文伦仍,就來研究一下解決辦法结窘。
嘗試解決
1、查看啟動日志充蓝,發(fā)現(xiàn):
ci-info: no authorized ssh keys fingerprints found for user ubuntu.
看這個提示隧枫,應(yīng)該是密鑰沒有注入到實(shí)例中。
2谓苟、再往上看官脓,發(fā)現(xiàn):
DataSourceEc2.py[CRITICAL]: Giving up on md from ['http://169.254.169.254/2009-04-04/meta-data/instance-id'] after 120 seconds
url_helper.py[WARNING]: Calling 'http://10.0.0.200/latest/meta-data/instance-id' failed [0/120s]: bad status code [404]
......
DataSourceCloudStack.py[CRITICAL]: Giving up on waiting for the metadata from ['http://10.0.0.200/latest/meta-data/instance-id'] after 120 seconds
完整日志查看:start.log
3、參考OpenStack METADATA不工作的分析方法娜谊,重啟metadata服務(wù):
systemctl restart neutron-metadata-agent.service
然后重新創(chuàng)建實(shí)例确买,沒有用。
4纱皆、查看metadata日志
tail /var/log/neutron/neutron-metadata-agent.log
2018-07-10 11:40:45.079 22459 INFO eventlet.wsgi.server [-] 10.0.0.1,<local> "GET /latest/meta-data/instance-id HTTP/1.1" status: 404 len: 297 time: 0.0431259
使用日志關(guān)鍵詞搜索湾趾,并沒有找到相關(guān)解決辦法芭商。
5、參考Openstack 通過 Metadata 服務(wù)請求流程 和 在OpenStack里如何確保虛機(jī)正常訪問MetaData IP 169.254.169.254搀缠,也沒有解決問題铛楣。
6、重建實(shí)例艺普,配置腳本設(shè)置ssh允許密碼登錄簸州。但是,無論是密鑰還是密碼歧譬,都無法登錄岸浑,和《OpenStack添加鏡像》一文中遇到的問題簡直一模一樣。
修改鏡像
配置失敗瑰步,決定從鏡像入手矢洲,修改鏡像,使之支持ssh密碼登錄缩焦。主要參考openstack中鏡像的密碼修改和使用 guestfish 工具修改OpenStack官方Ubuntu 鏡像
以下操作在控制節(jié)點(diǎn)切換到root執(zhí)行读虏。
1、下載鏡像
wget http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img
2袁滥、安裝guestfish工具
apt-get install libguestfs-tools -y
3盖桥、打開鏡像
guestfish --rw -a xenial-server-cloudimg-amd64-disk1.img
4、執(zhí)行修改
><fs> run
><fs> list-filesystems
><fs> mount /dev/sda1 /
><fs> vi /etc/cloud/cloud.cfg
><fs> quit
在編輯cloud.cfg的時候题翻,做如下修改:
# line 12, change and add
disable_root: false
ssh_pwauth: true
# line 93, change and add
lock_passwd: false
plain_text_passwd: "ubuntu"
以上揩徊,允許了root登錄,增加了ssh密碼登錄藐握,設(shè)置ubuntu用戶的默認(rèn)密碼為ubuntu靴拱。
5、使admin環(huán)境生效
. admin-openrc
6猾普、添加鏡像
openstack image create "ubuntu16-server-modified" \
--file xenial-server-cloudimg-amd64-disk1.img \
--disk-format qcow2 --container-format bare \
--public
7袜炕、之后,創(chuàng)建實(shí)例ubuntu1初家,就可以在vnc使用密碼登錄了偎窘。可以使用sudo -i
切換到root溜在,等待時間很長陌知,大概半分鐘才能切換成功。
但是此時掖肋,依然不能使用ssh登錄仆葡,無論是使用密鑰,還是不使用密鑰,都會提示:Permission denied (publickey).沿盅。
打算在vnc給實(shí)例添加公鑰把篓,然后把私鑰scp給控制節(jié)點(diǎn),但是腰涧,無法向authorized_keys寫入公鑰韧掩。神奇了!
而且窖铡,在vnc也無法ssh登錄本機(jī)疗锐!同樣提示Permission denied (publickey).
8、解決辦法
sudo -i
apt remove openssh-server
rm /etc/ssh/*
apt install openssh-server
繼續(xù)修改鏡像
定位問題
以上费彼,已經(jīng)實(shí)現(xiàn)了實(shí)例通過ssh密碼登錄滑臊,但是這個過程比較麻煩。理論上箍铲,繼續(xù)修改鏡像简珠,應(yīng)該就能夠?qū)崿F(xiàn)這個目標(biāo)。
1虹钮、創(chuàng)建一個實(shí)例ubuntu2,然后對比ubuntu1和ubuntu2中的/etc/ssh/sshd_config膘融。發(fā)現(xiàn)它們最大的不同在于PasswordAuthentication芙粱。
ubuntu1中:
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes
ubuntu2中:
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
啊哈,這就是無法使用ssh登錄的罪魁禍?zhǔn)琢恕?/p>
2氧映、在ubuntu2中春畔,修改PasswordAuthentication:
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication no
3、重啟sshd
service sshd restart
然后岛都,就可以使用ssh密碼登錄了律姨。
修改鏡像
那么,該怎么在鏡像中修改PasswordAuthentication呢臼疫?很簡單择份。
1、打開鏡像
guestfish --rw -a xenial-server-cloudimg-amd64-disk1.img
2烫堤、修改sshd_config
><fs> run
><fs> list-filesystems
><fs> mount /dev/sda1 /
><fs> vi /etc/ssh/sshd_config
><fs> quit
在編輯sshd_config的時候荣赶,做如下修改:
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication no
3、(可選)為了方便聯(lián)網(wǎng)鸽斟,不妨編輯resolv.conf.d/base
><fs> vi /etc/resolvconf/resolv.conf.d/base
在base中添加:
nameserver 180.76.76.76
nameserver 223.6.6.6
4拔创、使admin環(huán)境生效
. admin-openrc
5、刪除鏡像富蓄,重新添加
openstack image delete "ubuntu16-server-modified"
openstack image create "ubuntu16-server-modified" \
--file xenial-server-cloudimg-amd64-disk1.img \
--disk-format qcow2 --container-format bare \
--public
至此剩燥,大功告成。
后記
在創(chuàng)建實(shí)例時無法注入公鑰和腳本的問題立倍,最終沒有解決灭红,好在找到了其他解決方案侣滩。至于這個注入問題,會在后續(xù)的學(xué)習(xí)中繼續(xù)嘗試解決比伏。