preseed文件公钥注入

    xiaoxiao2021-03-25  131

    cobbler自动安装ubuntu系统,需要用到preseed文件。preseed文件其实是自动应答文件,让系统安装的时候不需要用户的交互。本文档的目的在于通过snippet,将管理服务器的ssh公钥在系统安装过程中自动注入到客户机上。

    参考文档: http://www.itdadao.com/articles/c15a337907p0.html

    该文档主要讲的是cobbler中的SNIPPET怎么用,后面的公钥注入还是靠自己尝试出来。

    preseed文件目前暂时使用cobbler自带的sample.seed,在/var/lib/cobbler/kickstarts/目录下。一般cobbler import如果要修改对应的seed文件,有两个方法:第一个是直接在cobbler_web页面上改,很方便;第二个是通过cobbler profile edit ..., 异曲同工。主要修改的文件为preseed_late_default:在/var/lib/cobbler/scripts/目录下。 还用到了本地源获取文件,将~/.ssh/authorized_keys放到了/var/lib/cobbler/svc/目录下。在preseed文件中可以用到$http_server参数获取管理服务器的URL。

    sample.seed文件中有一段代码:

    d-i preseed/early_command string wget -O- \ http://$http_server/cblr/svc/op/script/$what/$name/?script=preseed_early_default | \ /bin/sh -s d-i preseed/late_command string wget -O- \ http://$http_server/cblr/svc/op/script/$what/$name/?script=preseed_late_default | \ chroot /target /bin/sh -s

    表示的是在preseed文件执行之前与之后需要执行的语句,对应的文件在/var/lib/cobbler/scripts/目录下的preseed_early_default与preseed_late_default。

    后半段代码的逻辑是首先获取到preseed_late_default文件,然后转换路径到target目录下。因为在推荐引导文件的时候它的根目录并不是系统的根目录,系统的根目录其实是在根目录下面的target下。因此需要转换路径到target目录下再执行preseed_late_default脚本中的内容。

    下面来看看preseed_late_default下的内容:

    # Start preseed_late_default # This script runs in the chroot /target by default $SNIPPET('post_install_network_config_deb') $SNIPPET('late_apt_repo_config') $SNIPPET('post_run_deb') $SNIPPET('download_config_files') $SNIPPET('kickstart_done') #新加的内容的位置 # End preseed_late_default

    这些$SNIPPET(...)对应的运行文件在/var/lib/cobbler/SNIPPET目录下。值得一提的是$SNIPPET(kickstart_done)。这个是在系统装完后需要重启时,启动cobbler的nopxe的设置,使得下一次进入系统时不会进入PXE菜单而是直接进入安装好的系统。如果没有这个设置的话就是漫长的循环,最终是装不好系统的!

    了解了这些之后我们就可以在preseed_late_default脚本下加东西了。切记,你已经在preseed文件下切换目录到了target下了,脚本执行的路径也是在target下的。

    $SNIPET(test) cd /root/ mkdir .ssh echo "helloworld" > /root/.ssh/test

    无需分号分割,只能执行简单的shell语句。

    这些都设置好之后就开始装系统了…漫长的等待…

    遇到的问题:貌似在preseed_late_default文件下无法获取$http_server的参数值诶…getVar(‘http_server’)也尝试了,好像也没用

    通过snippet注入公钥:

    在/var/lib/cobbler/snippet文件夹下添加文件publickey_root

    cd /root mkdir --mode=700 .ssh cat >> .ssh/authorized_keys << "PUBLIC_KEY" TODO:加入需要写入authorized_keys的公钥内容 PUBLIC_KEY chmod 600 .ssh/authorized_keys cat >> .ssh/config <<EOF StrictHostKeyChecking no UserKnownHostsFile /dev/null EOF

    然后直接在preseed_late_default文件下添加$SNIPPET(publickey_root)

    参考文档: http://purplepalmdash.github.io/2015/06/29/insert-public-key-into-cobbler-deployed-system/

    然后就成功啦~

    转载请注明原文地址: https://ju.6miu.com/read-4159.html

    最新回复(0)