Linux——pxe不同主机安装不同软件、免密SSH登录
实验目的
1.给servera,安装httpd,传递一个已经写好的配置文件
2.给serverb,安装nginx,传递一个写好的配置文件
3.方法:可以根据每个客户机自己的IP或主机名判断
用shell脚本实现
可以在PXE的post过程中,下发
也可以在客户机完成首次重启后,服务器端统一执行
1.写脚本,安装软件
还是让PXE的post去传递脚本
让客户机获得同一个脚本,根据脚本中的语句判断,安装不同的软件包
可以用case,也可用if else
通过判断主机名
执行:软件安装、配置文件获取、服务启动
上面这个例子
servera安装httpd(apache),配置文件和主页文件都从服务器获得
serverb安装nginx,配置文件和主页文件,从服务器获得
然后ks.cfg文件
服务器中,提前制作每个客户机的web配置文件和主页文件
最后,分别验证两个web主机
包括:httpd服务、nginx服务,验证主页内容
可以从头安装客户机,看最终效果
也可以在之前已经安装的主机上,直接执行新写的脚本
2.接下来,是过程中,会有一些问题……
1.关于主机的网络配置,比如:
比如上面这个文件,会影响主机的$HOSTNAME
2.定制软件安装(每个客户机装不同的软件)
1)这个事,究竟在什么时候做?
先看ks文件
如果在%packages段,指定软件包
最后,所有客户机,安装完全一样的软件包
于是,在这一段,不能实现区分安装
肯定就要在%post脚本段
于是,关于%post段的问题
1.1)%post段的命令,在哪执行?
在服务器?在客户机?
这一段的命令、代码、指定的脚本,都是在客户机上以root执行
1.2)究竟在什么时候执行的?
PXE安装重启前?还是客户机重启后?
%post脚本部分,是在客户机首次重启之前执行
1.3)如果明确%post是在PXE末尾,客户机重启前执行
是所有操作都能执行么?
*有一些额外的知识……*
Windows有个东西叫win PE
Linux有个东西叫救援模式
系统除了自己加载启动以外,可以由其他可启动的系统挂载
就相当于,把自己的硬盘,拔下来,给别人电脑插上,像移动硬盘……
这种东西,通常,拿来修复系统
系统安装盘,也类似
在系统安装过程执行完成并重启之前
硬盘上新安装的这个系统,是没启动没加载
整个过程,都是光盘的安装程序在运行
于是,在上面这个过程里,并不能完整执行最终操作系统上所有操作
回到PXE安装Linux
在首次重启之前
客户机新装的系统,都没有启动
始终在PXE的光盘启动系统里,所以并不能在%post段,执行任意操作
有些操作不行,有些操作可以
比如:移动文件、编辑文件、下载上传……
但是,使用yum之类的命令,安装、卸载软件,这类操作不行……
所以,想在PXE里,给不同主机自定义安装不同软件,需要别的办法
办法:让客户机系统启动以后,自动执行安装
回顾!
Linux任务计划
目前为止
还没能让客户机分别装不同软件
上面提到,需要有别的办法
一次性任务计划
关于任务计划
1)可循环的
cron
可以按周期、日期……循环的任务
2)一次性
at
只执行一次,不会重复执行
如果在PXE的系统下,不能直接完成很多操作
但是可以给客户机传递、定制任务计划
客户机启动后,触发任务计划,任务计划中定义要自动执行的操作
从而实现所谓的自动化
比如%post段
上面的部分,可以直接执行的,里面只有文件操作相关的命令
但是第二个脚本,instsoft.sh,是用来yum安装软件包的
不能在%post阶段直接执行,但是可以先把脚本传到客户机
接下来,给客户机定一个:一次性任务计划
at now +1 ……
这个任务,是给客户机真正的系统定制的,不是在PXE系统执行的
就算写了一个立刻执行的任务,也不会在系统PXE安装过程中立刻执行
直到客户机重启,新系统启动,触发……
其实,个性化部署软件的过程,最终实在客户机启动后进行的……
在这个时候,PXE已经完成了、结束了
如果再进一步
其实可以定制更多任务计划,触发更多其他的自动化进程……
3.实现服务器到客户机,免密SSH登录
大致流程:
1)服务端,生成密钥对,key、pubkey
2)把公钥pubkey,传递给客户机
3)服务端,使用SSH登录客户机,不需要客户机的密码
实际实施:
1)服务端
提前做好密钥对
#ssh-keygen
可以一路回车……也可以自定义选项
2)服务端,在用户主目录下,会生成一个.ssh目录
其中包含密钥对的文件
id_rsa是“私钥”,自己妥善保存,不能传给别人,不能泄露
id_rsa.pub是“公钥”,是可以传给其他主机用的
3)服务端要把自己的公钥传给客户机
如果是系统已经部署好,用命令传递
#ssh-copy-id
这个过程,需要输入客户机密码
但是,现在有一个问题
客户机还没安装完,并且也还没启动
4)如何自动化传递这个pubkey
4.1)等客户机安装完,重启后,使用ssh-copy-id传递
如果给大量的不同客户机传递
让服务器自己写一个脚本,自己执行
脚本会更复杂,需要写更多判断以及自应答语句
4.2)如果不用ssh-copy-id,怎么做
思考一个事情,这个命令究竟干了啥事?
目标是把pubkey传过去,那也就是说
最终这个key,是保存在客户机某个文件里
那就可以这么干,直接给客户机特定目录生成这个文件,包含key
在ks脚本里:
首先,服务器自己,提前已经执行了ssh-keygen
在客户机人为建立.ssh目录,设置好权限
使用wget,让客户机获取pukey
这个文件,在客户机的.ssh目录里,名称是authorized_key
(其实ssh-copy-id也是在客户机生成这个文件)
之后,客户机重启后
服务器可以免密登录客户机