总结openstack 镜像制作ssh问题

在制作 rhel7 镜像是遇到一个很奇怪的问题,制作好的镜像新启动的虚拟机无法登陆,在制作镜像过程中还使用ssh登陆过。 这个问题困扰了我很长时间。
    -  查看虚拟机sshd进程没有启动
    -  使用service sshd start一直卡在那里
    -  最后发现关闭selinux,重启虚拟机可以正常登录。
太棒了,终于把这个问题解决了,不过问题又来 了,selinux是用来保证linux安全的,     把selinux关闭。这样做会降低了linux的安全性。 接下来继续查:
查看selinux端口,22端口正常:
#semanage port -l |grep ssh
ssh_port_t                     tcp      22
这个问题查了一天,查各种你日志文件(如果哪位大神知道查什么日志,请指导一下,谢谢)。下班回家感觉整个人都快瘫了,精神疲惫。每天回家练练唱歌,做做运动,目标是唱歌不跑调,体重134斤,到家也不愿动弹了。

第二天灵感来了:
# /usr/sbin/sshd -D
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
我的天啊,缺少这么多文件,这都是什么东西?SSH 连接协议中秘钥的学问太高深,手动生成下吧:
#ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key
#ssh-keygen -t ecdsa-b 2048 -f /etc/ssh/ssh_host_ecdsa_key
#ssh-keygen -t ed25519 -b 2048 -f /etc/ssh/ssh_host_ed25519_key

为什么缺少这文件,首先想到了,制作过程最后清理一下镜像,之前的ssh key被清除了,新的key有没有生成:
#virt-sysprep -v -x -a rhel7.img
为什么不会自动生成呢?

cloudinit
这个东西在使用中搞了好几次鬼了
正确配置cloud.cfg
ssh_genkeytypes:  ['ed25519', 'rsa','ecdsa']
这样配置 ssh_genkeytypes:  ~,cloudinit程序中获得genkeys就是空列表:
截取一段cc_ssh.py中的程序:
        genkeys = util.get_cfg_option_list(cfg,
                                           'ssh_genkeytypes',
                                           GENERATE_KEY_NAMES)
        for keytype in genkeys:
            keyfile = KEY_FILE_TPL % (keytype)
            util.ensure_dir(os.path.dirname(keyfile))
            if not os.path.exists(keyfile):
                cmd = ['ssh-keygen', '-t', keytype, '-N', '', '-f', keyfile]
                try:
                    # TODO(harlowja): Is this guard needed?
                    with util.SeLinuxGuard("/etc/ssh", recursive=True):
                        util.subp(cmd, capture=False)
                except:
                    util.logexc(log, "Failed generating key type %s to "
                                "file %s", keytype, keyfile)

为什么不配置cloudinit,关闭selinux sshd可以正常启动呢?有待研究。



你可能感兴趣的:(openstack)