远程免密码登录Openstack实例

更多精彩内容欢迎访问我的新博客站点

背景

一般情况下,可以通过Openstack Dashboard的控制台来访问用户创建的实例Instance,对于管理员来说,通过这种方法来访问会觉得很不方便,因为每次都需要打开浏览器来输入网址,每次点击都需要等待响应,登录到实例后控制台的响应也不是很及时且有卡顿。因此,本文介绍如何通过命名空间来实现免密码登录Openstack实例。

命名空间

在Linux中,网络命名空间可以被认为是隔离的拥有单独网络栈(网卡、路由转发表、iptables)的环境。网络命名空间经常用来隔离网络设备和服务,只有拥有同样网络命名空间的设备,才能看到彼此。openstack中就采用命名空间来实现不同网络的隔离。

  • 使用ip netns来查看已经存在的命名空间:

    $ ip netns
    qrouter-e94975e8-4688-4858-8f64-86a18eea81ed
    qdhcp-34ba192f-ceea-4c86-addc-a5d14c6a34a8

    qdhcp开头的名字空间是dhcp服务器使用的,qrouter开头的则是router服务使用的。

  • 查看openstack的网络:

    $ openstack network list
    +--------------------------------------+---------+--------------------------------------+
    | ID                                   | Name    | Subnets                              |
    +--------------------------------------+---------+--------------------------------------+
    | 34ba192f-ceea-4c86-addc-a5d14c6a34a8 | private | 74dbc6f4-ae59-4af5-b941-1f4d04918607 |
    | fc9b502a-d472-46f5-8570-b0d3915759cf | public  | de903618-fb31-412a-b46d-6ab593985b03 |
    +--------------------------------------+---------+--------------------------------------+

    可以看到private网络的dhcp服务器对应的命名空间qdhcp-34ba192f-ceea-4c86-addc-a5d14c6a34a8的名字中包含了private网络的ID。而本次测试的远程实例就是创建在private网络下的。

  • 通过 ip netns exec namespace_id command 来在指定的网络名字空间中执行网络命令,记得加上sudo权限,例如

    $ sudo ip netns exec qdhcp-34ba192f-ceea-4c86-addc-a5d14c6a34a8 ifconfig
    lo        Link encap:Local Loopback  
            inet addr:127.0.0.1  Mask:255.0.0.0
            inet6 addr: ::1/128 Scope:Host
            UP LOOPBACK RUNNING  MTU:65536  Metric:1
            RX packets:190 errors:0 dropped:0 overruns:0 frame:0
            TX packets:190 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:1 
            RX bytes:65824 (65.8 KB)  TX bytes:65824 (65.8 KB)
    
    tap4e2f68bb-84 Link encap:Ethernet  HWaddr fa:16:3e:32:19:6b  
            inet addr:10.0.0.2  Bcast:10.0.0.63  Mask:255.255.255.192
            inet6 addr: fe80::f816:3eff:fe32:196b/64 Scope:Link
            UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
            RX packets:110210 errors:0 dropped:0 overruns:0 frame:0
            TX packets:107493 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:1 
            RX bytes:21335986 (21.3 MB)  TX bytes:8426397 (8.4 MB)
  • ssh远程登录实例:

    sudo ip netns exec namespace_id ssh $username@ip

    通过该命令来实现从控制节点通过ssh服务远程访问Openstack实例。

发送公共秘钥

要实现免密码远程登录实例,首先需要将控制节点root用户的ssh的公共秘钥发送到远程实例,也就是/root/.ssh/id_rsa.pub文件中的内容,远程实例收到后会将公共密钥保存到登录用户的.ssh/authorized_keys文件中,这样下次登录远程实例时就不再需要密码。

  • 发送公共密钥

    $ sudo ip netns exec qdhcp-34ba192f-ceea-4c86-addc-a5d14c6a34a8 ssh-copy-id -i /root/.ssh/id_rsa.pub openstack@10.0.0.9
    
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    openstack@10.0.0.9's password: 
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh 'openstack@10.0.0.9'"
    and check to make sure that only the key(s) you wanted were added.

    注意:发送的公共秘钥必须是控制节点root用户的,因为在进入命名空间执行命令时需要加上sudo权限,而sudo是用来以其他身份来执行命令的,预设的身份为root,这样在ssh登录远程实例时是以控制节点的root用户来登录远程实例的openstack用户,因此需要将控制节点root用户的公共密钥发送给远程实例,root用户的公共密钥的路径是/root/.ssh/id_rsa.pub

  • 查看远程实例的authorized_keys

    $ vi ~/.ssh/authorized_keys
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjXQQUtIcLLcvBXVudZDBbQFK8BT/hB67oOrs792sfCuMhxvxvFRbma5UmnxwxOhXUIRjdz4u7tWhR3VVhqqnlHGDKOQVje/t2QtTlXXcBI3kGnc0Epem2NRMgRKp/h/Y1EOwtPNHRDVfr8C2znilXpWW1ueigHuJF4TWT7vEjgbApmWhopZcOXKbLkSu5dxLGUO3TzGqkASgpLG2XyuUJVqoREr5wbAZytq7R2p5KCxUZ6T7sDUQG+xmFPsfPg3MUHQmatTvtSf+mImotTkNSqOp2Itct9afX7SPkRncrXVWJ0qutbrRrkjRJm1l/sCjFBOD0x6txcFBX30nPvkDx root@controller
  • 查看控制节点root用户公共密钥

    
    # vi /root/.ssh/id_rsa.pub
    
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjXQQUtIcLLcvBXVudZDBbQFK8BT/hB67oOrs792sfCuMhxvxvFRbma5UmnxwxOhXUIRjdz4u7tWhR3VVhqqnlHGDKOQVje/t2QtTlXXcBI3kGnc0Epem2NRMgRKp/h/Y1EOwtPNHRDVfr8C2znilXpWW1ueigHuJF4TWT7vEjgbApmWhopZcOXKbLkSu5dxLGUO3TzGqkASgpLG2XyuUJVqoREr5wbAZytq7R2p5KCxUZ6T7sDUQG+xmFPsfPg3MUHQmatTvtSf+mImotTkNSqOp2Itct9afX7SPkRncrXVWJ0qutbrRrkjRJm1l/sCjFBOD0x6txcFBX30nPvkDx root@controller

    可以看到,两者是一样的,说明控制节点的root用户已经被授权通过公共密钥来访问远程实例。

免密码登录

  • 免密码登录远程实例

    $ sudo ip netns exec qdhcp-34ba192f-ceea-4c86-addc-a5d14c6a34a8 ssh openstack@10.0.0.9

    这样就通过ssh服务免密码远程登录Openstack实例,而不需要通过Dashboard的控制台来登录实例。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值