洛阳光电技术发展中心 高佳林
针对linux服务器交互式自动化脚本实现与研究
洛阳光电技术发展中心 高佳林
【摘要】本文介绍了在linux服务器集群之间为了降低服务器之间由于linux操作系统的安全设置所带来不必要的损耗,所以在linux集群服务器之间实现无密码的SSH登录,同时为了减少人工的干预把整个过程集成到集群的安装过程中实现.无密码登录SSH需要交互式脚本实现,但是普通的linux服务器无法实现无人工干预的实现服务器之间生成公钥的过程,所以需要用expect实现。并将其写入RPM包中,实现安装过程的全自动化。
【关键词】无密码;SSH登录;RPM包
随着信息技术的快速发展,本地应用逐步转向网络应用,高性能计算也由传统的主机方式向网络化集群演变,网络存储已经占据了存储系统的主流地位。伴随着计算技术、网络通信和信息储存等各项技术取得的巨大进步,特别是高性能计算技术和应用软件的快速发展,基于主机的存储系统无法满足应用系统的需求,传统的网络存储设备,也日益成为整个应用系统的性能瓶颈。为了解决单个服务器系统在数据存储等方面的瓶颈,提出了分布式存储,即:数据和程序可以不位于一个服务器上,而是分散到多个服务器,以网络上分散分布的地理信息数据及受其影响的数据库操作为研究对象的一种理论计算模型服务器形式。分布式有利于任务在整个计算机系统上进行分配与优化,克服了传统集中式系统会导致中心主机资源紧张与响应瓶颈的缺陷,解决了网络GIS 中存在的数据异构、数据共享、运算复杂等问题,是系统技术的一大进步。
随着高性能计算应用的深化以及非结构化数据的爆炸性增长,以满足并行I/O和结构化数据I/O需求为目标的传统存储架构,在性能、可靠性、扩展性以及总体拥有成本上,已经无法满足跳跃性发展的高性能计算机及其配套的大型应用软件的需求,存储日益成为整个应用系统的性能瓶颈。通过增加磁盘数量、提升处理器性能和内存容量等方法可以暂时缓解客户对于性能的需求,但无法从根本上解决传统架构存储系统的性能瓶颈问题,这就促使存储系统的架构必须做出改变。
1.1无密码SSH登录
首先需要保证系统环境已经准备就绪。但是在实际的部署过程中,特别是大集群环境下,往往会因为个别节点的环境未准备就绪导致系统安装部署的失败,而依靠人工维护成本较高。为此,需要一个系统安装环境检测的自动化工具,实现系统安装环境的自动化检测,并根据检测的结果报告进行相应的处理。在系统里各个服务器之间有很多数据的交互,如果还需要密码来实现检测访问用户就会有很大额外消耗,为了服务器之间访问的方便,需要设置机器之间直接登陆而无需输入登陆密码。但是又为了保证服务器之间通信的安全性所以选择用SSH服务,用交换公钥方式来实现安全的无密码登录。
下面通过实验实现两台模拟服务器之间的通信:有Server A,Server B通过一个交换机连接Server A的IP地址是192.168.0.1,而Server B的IP地址是192.168.0.2。
(1)从集群中选择一台服务器Server A,然后执行sshkeygen–t rsa命令,在目录~/root/.ssh目录下生成id_rsa和id_rsa.pub密钥对。
(2)将Server A上~/root/.ssh目录下的文件authorized_keys、id_rsa拷贝到其它的服务节点的~/root/.ssh目录下。
(3)将Server A上/etc/hosts文件拷贝到其它服务节点的/etc目录下。
(4)从ServerA上使用命令“ssh IP地址”登录其它的服务器节点,然后在其它的服务节点上删除Server A的访问记录,操作方法是删除其它服务器节点上/root/.ssh/known_hosts文件中关于ServerA的访问记录,以实现双向的无密码访问。
(5)为了提高访问效率,需要修改每台服务器上的文件/etc/ssh/sshd_config,将其中的“UseDNS”的值改为“no”,即取消其前面的注释符“#”,然后将“MaxStartups”的值设置更大的值,如100,并取消其前面的注释符“#”。修改完后运行“/etc/init.d/sshd restart”让配置文件生效。
(6)进行完上述的操作后,在每台服务器上实行“ssh 192.168.0.1”操作,如果还需要输入密码,则执行ssh-copy-id –i /root/.ssh/id_rsa.pub 192.168.0.1发送公钥给192.168.0.1。
如此就可以实现服务器间无密码访问了。上述操作如图1所示。
图1
1.2自动化脚本
此时已经可以实现服务器无密码登录但是我们要将其整个过程自动化实现。要实现的自动化过程是写入sshkeygen–t rsa屏幕上输出要求设定生成密钥的目录直接回车后选择默认的目录,然后屏幕会提示要求输入互通的密钥,依然回车选择默认的空密码。但通过实验发现简单的通过shell脚本无法一次性的自动生成密钥文件,将上面的命令全部按照语法写入shell脚本后运行时总会有输入密码的提示,通过内核分析得知Linux操作系统为了自身的安全考虑默认阻止了公钥的一次性生成,为了解决这个问题我们使用了expect这个文件在编译安装后写入交互式脚本如下:
#!/usr/local/bin/expect –f
set timeout 80
set server “ ”
spawn ssh-keygen -t rsa
expect “Enter file in which to save the key (/root/.ssh/id_rsa):”
send “ ”
expect “Enter passphrase (empty for no passphrase):”
send “ ”
expect “Enter same passphase again:”
send “ ”
expect eof
exit
此时可以在运行脚本后发现/root/.ssh/目录下生成了密钥文件,在写入shell脚本即可实现服务器之间的无密码登录。
此时我们已经可以实现服务器之间的无密码的登录操作了,服务器可以实现降低之间消耗的操作了,于此同时我们需要将其写入RPM包中将其打包到分布式系统安装软件上去,从而实现分布式系统安装过后的无人工干预操作。此时需要用到rpmbuild这个命令来完成RPM包得生成,可以编辑.spec文件来实现我们想要的在安装操作过程中所需要的服务器,与此同时因为很多linux服务器是默认不支持expect软件的所以需要把expect软件安装的整个过程写入RPM包得生成。故程序如下:
summary:tcl_exp
name:tcl_exp
Version:1.0.0
release:1
license:GPL
source: tcl_exp.tar.gz
group:system
%description
tcl_exp
%prep
%setup -c
%install
mkdir -p /home/tcl_exp
tar xvf /usr/src/redhat/SOURCES/tcl_exp.tar.gz -C /home/tcl_exp/
chmod 777 /home/tcl_exp/*
echo "start tar tcl"
tar -zxvf /home/tcl_exp/tcl_exp/tcl8.4.19-src.tar.gz -C /home/
tcl_exp/tcl_exp/
cd /home/tcl_exp/tcl_exp/tcl8.4.19/
cd unix
./configure --prefix=/expect
make
make install
tar -zxvf /home/tcl_exp/tcl_exp/expect-5.43.0.tar.gz -C /home/
tcl_exp/tcl_exp/
cd /home/tcl_exp/tcl_exp/expect-5.43/
./configure --with-tclinclude=/root/tcl8.4.19/generic/ --with-tclconfig=/
usr/local/lib
make
make install
%files
/usr/src/redhat/SOURCES/tcl_exp.tar.gz
/home/tcl_exp/tcl_exp/tcl8.4.19-src.tar.gz
/home/tcl_exp/tcl_exp/expect-5.43.0.tar.gz
%preun
应用此种方法可以解决了在部署云存储平台时所面临的一些问题,实现了这些问题虽然小但是却极大的阻碍了存储平台的自动化实施,因此不得不耗费人力,并且这种方法可以扩展到很多的计算平台的应用上。可以实现在安装云存储平台前对于网络架构的自动化检测,减少人的参与,从而提高效率,减少不要的麻烦。
参考文献
[1]王勇.ParaStor:一种海量数据存储系统(这个是一个技术文档).
[2]张健.parastor使用说明文档.北京曙光科技有限公司(这个是一个技术文档).
[3]曙光幵行存储系统.北京曙光科技有限公司.
[4]龚靖,雷俊智,龙洋.云存储解析[M].人民邮电出版社.