OpenStack创建实例 无法SSH免密登录

一、问题背景

1.1、准备环境

我在VMware Workstation 14 Pro上准备了controller和compute两个节点,安装OpenStack Stein版。

1.2、问题出现

当我在创建好实例后,ssh 登录竟然让我输入密码,但是我已经将ssh公钥放入OpenStack了。

1.2.1、获取keystone demo用户权限

我是demo用户创建的实例

[root@controller ~]#  . ~/demo-openrc 

1.2.2、查看实例列表

[root@controller ~]# openstack server list
+--------------------------------------+----------------+--------+---------------------+--------+---------+
| ID                                   | Name           | Status | Networks            | Image  | Flavor  |
+--------------------------------------+----------------+--------+---------------------+--------+---------+
| 7e7b468f-9cbf-40f9-bcf1-b915d1de7f5b | hello-instance | ACTIVE | provider=10.0.0.192 | cirros | m1.nano |
+--------------------------------------+----------------+--------+---------------------+--------+---------+

1.2.3、登录实例

到这一步就没有按预期走了,我明明已经将ssh公钥放入OpenStack了,这里却让我输入密码,创建实例时没有设置密码幸好,可以在实例console日志里面查看登录用户名和密码。

[root@controller ~]# ssh cirros@10.0.0.192
The authenticity of host '10.0.0.192 (10.0.0.192)' can't be established.
ECDSA key fingerprint is SHA256:Z9/KXmL21T/46rBHNV7vcWoWq6eBqb5PRVmUi6Mt3bI.
ECDSA key fingerprint is MD5:54:1b:b6:bd:13:d0:7b:84:b0:42:c8:88:11:74:06:7a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.192' (ECDSA) to the list of known hosts.
cirros@10.0.0.192's password: 

二、排查问题并解决

用OpenStack在创建实例时,可以通过metadata来确定主机名、IP和ssh公钥等。

2.1、登录实例

通过实例console日志里面查看登录用户名和密码,然后登录。
注意: 在计算节点上查看,另外不可复制我下面这个命令因为实例id不同,可以在/var/lib/nova/instances/目录下找到相应的实例id。

[root@compute ~]# tail -2 /var/lib/nova/instances/7e7b468f-9cbf-40f9-bcf1-b915d1de7f5b/console.log 
login as 'cirros' user. default password: 'gocubsgo'. use 'sudo' for root.
hello-instance login: [  613.796619] random: nonblocking pool is initialized

从上面日志中可以看到可以用cirros用户和gocubsgo密码登录该实例。

[root@controller ~]# ssh cirros@10.0.0.192
cirros@10.0.0.192's password: 在这里输入密码即可登录

2.2、查看metadata中的公钥

$ curl  http://169.254.169.254/2009-04-04/meta-data/public-keys/0/openssh-key
<html>
 <head>
  <title>403 Forbidden</title>
 </head>
 <body>
  <h1>403 Forbidden</h1>
  Access was denied to this resource.<br /><br />
 </body>
</html>

403,说明没有权限。可能是metadata secret没有开启或者是密码有问题。接下来我们查看日志

2.3、查看Nova Api日志

[root@controller ~]# grep 'WARNING nova.api.metadata.handler' /var/log/nova/nova-api.log
2019-10-10 09:27:52.703 22495 WARNING nova.api.metadata.handler [-] X-Instance-ID-Signature: f6465eb53bf6262fad450cafe329166357b9524e24501338600dcb5fc3f8a0a8 does not match the expected value: b89d4dcb53f69ef52042ad5b3743fb1c2bd2843d319d448f0fd32dfcee663c13 for id: 7e7b468f-9cbf-40f9-bcf1-b915d1de7f5b. Request From: 10.0.0.192

我们可以看到日志里面说密码不匹配,那我们解析查看配置文件

2.4、查看Nova和metadata配置文件中的元数据代理密码是否一致

[root@controller ~]# grep 'metadata_proxy' /etc/nova/nova.conf
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET   # 这是我们在元数据代理配置的密码
[root@controller ~]# grep 'metadata_proxy' /etc/neutron/metadata_agent.ini
metadata_proxy_shared_secret = METADATA_SECRET

我们可以看出来元数据代理密码一样的,唯一的区别是,nova配置文件中的元数据代理密码后面多了两个空格,空格后面有注释。那我把注释和空格删掉,重启nova api试试。

2.5、修改nova配置文件

删除元数据代理密码后面的空格及注释

vim  /etc/nova/nova.conf

2.6、重启nova api

systemctl restart openstack-nova-api.service

2.7、登录实例

[root@controller ~]# ssh cirros@10.0.0.192
cirros@10.0.0.192's password: 输入密码登录

2.8、查看metadata中的公钥

$ curl  http://169.254.169.254/2009-04-04/meta-data/public-keys/0/openssh-key
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCy7JFg3gkHKMOrVy0gn7sL4sX3fcvWgJF1XXFfmW0ni/1Uk2M1mDf/h0zcW8A8GBsYrmi/4RZXcCnco6k2WynpEJA8Xpz5QH471DeqRi1bPw+Pv57owYX3/EW6NIae0UHLZUs6kxljSNJhaWIOrtfYEVjQzCy93YSs6Ut/+Nak5PNtbVr+MN848DI90euj4VZjGvsEhZpud/aDACIies88Xo/KKQllt++04qY3CB22/nOy8sDp2FQDQz/3sRotTfByBvBPXjetcZnmDTJpvJvWagTa97oNi8+DOpqJpDxVFyhbZF0cGxIemdH+2qAnnRdaoU/BCwmMDTg27MEeFot root@controller

能看到公钥,这就说明已经好了,删掉这个实例,重新创建一个就可以ssh免蜜登录啦。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值