Network Time Protocol(NTP)

       前一阵子,在处理Web系统数据时,由于几台服务器上的时间不一致,导致数据时间的不准确,出现了错乱。在更严格的服务上,因为服务器时间不准确或是不一致,很有可能会带来安全或是功能的隐患。因而,有必要采取措施保证网络中的服务器上的时间同步。这里,我们先看看使用NTP服务如何实现同步时间。

Network Time Protocol(NTP),即网络时间协议,它的目的是在国际互联网上传递统一、标准的时间。NTP服务器将本地系统的时钟与一个公共的NTP服务器同步然后作为时间主机提供服务,使本地网络的所有客户端能同步时钟。

       NTP服务的安装、配置、使用这里就不再细说了(不了解的可以google下)。我们知道在NTP服务器启动后,NTP客户端可以通过手动执行“ntpdate 服务器IP”来同步时间,或是通过配置NTP客户端定时进行时间同步。(当然,需要保证NTP服务器和客户端的之间没有防火墙Block它们的通信。)

下面我们接着来看,如何在我们的环境中拥有上百台机器,为了同步时间,不想手动的在每台机器上去运行ntpdate同步命令或是配置,你要知道几百台机器,你登陆再运行一次命令,也是需要耗费你很多的时间。当然,你要是部署每个服务器的时候就已经建好了NTP服务器,那还是可以那时候就进行NTP客户端的配置。但我们以前没这么做,那只有现在从头开始了。手工活太累太麻烦了,我们做个脚本,在NTP服务器上运行一次,就让所有服务器都同步一次时间。

       我们就来看看如何来使用最简单的方式来达到这个功能。Linux的ssh提供了一个远程执行命令的方式,现在就来用它来让每个服务器向NTP服务器来同步一次时间。ssh访问有两种方式:密码方式、公钥方式。使用秘钥方式,我们需要保存所有服务器的ip地址、用户、密码。你如果觉得不安全,那可以建立密钥方式访问,这时需要一些手工配置,当配置好使用公钥方式后,就可以不输入密码访问对方。

那就来看看脚本吧,脚本1是使用公钥方式进行访问的,脚本2是使用密码访问的,其中服务器信息都保存在/tmp/servers.txt文件中。

脚本1:

#!/bin/sh

#in the servers.txt

#username1  server1

SERVERS=”/tmp/servers.txt”

CMD=”ntpdate  ntp_server” 

while read line; do

         set — $line

         username=$1

         server=$2

        ssh $username@$server $CMD

done < $SERVERS

 

脚本2:

#!/usr/bin/expect

set SERVERS “/tmp/servers.txt”

set CMD “ntpdate ntp_server”

set fp [open $SERVERS]

while {-1 != [gets $fp line]} {

        set ln [split $line " "]

        set username [lindex $ln 0]

        set passwd [lindex $ln 1]

        set server [lindex $ln 2]

        spawn ssh $username@$server $CMD;

        expect “*password: “;

        send “$passwd ”;

        interact;

}

猜你喜欢

转载自dingdingji.iteye.com/blog/2075291