Linux——pxe不同主机安装不同软件、免密SSH登录

3 篇文章 0 订阅

实验目的

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也是在客户机生成这个文件)

之后,客户机重启后

服务器可以免密登录客户机

  • 28
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值