preseed文件公钥注入

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_defaultpreseed_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 <

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

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

然后就成功啦~

你可能感兴趣的:(云计算学习)