<提问> 如何使用Shell实现NTP时间伺服器指定同步

sh/bash/dash/ksh/zsh等Shell脚本
回复
momo78678
帖子: 3
注册时间: 2019-01-14 18:26

<提问> 如何使用Shell实现NTP时间伺服器指定同步

#1

帖子 momo78678 » 2019-01-14 18:37

<提问> 如何使用Shell实现NTP时间伺服器指定同步

大家好, 我想用Shell做.Sh檔 , 但对于语法不熟, 特地上来论坛 寻求各位兄弟姐妹的帮忙~ :Adore


***系统版本:ubuntu 18.04

***需求情境: 用户透过点.sh檔 , 执行以下这两行指令, 并且脚本已预先输入Sudo密码 , 让指令在运作时不会跳出要求输入密码字样.
sudo service ntp stop
sudo ntpdate "118.163.81.63"

https://s2.ax1x.com/2019/01/14/FxoB5V.png

请问以上需求 , 要使用具体何种语法来实现呢 ? 谢谢各位帮忙 ^ ^
附件
U1804.PNG
头像
astolia
论坛版主
帖子: 6386
注册时间: 2008-09-18 13:11

Re: <提问> 如何使用Shell实现NTP时间伺服器指定同步

#2

帖子 astolia » 2019-01-14 23:52

执行脚本这样就行了

代码: 全选

#!/bin/sh
sudo service ntp stop
sudo ntpdate "118.163.81.63"
sudo免密码有几种做法。如果不在乎在脚本文件中暴露密码的话,把上面的sudo改成

代码: 全选

echo "密码" | sudo -S service ntp stop
echo "密码" | sudo -S ntpdate "118.163.81.63"
否则可以写个sudo的配置文件,让它在执行上面的命令时不需要问密码

代码: 全选

echo "Cmnd_Alias STOP_NTP=/usr/sbin/service ntp stop
$USER ALL=(ALL) NOPASSWD: STOP_NTP, /usr/sbin/ntpdate" | sudo tee /etc/sudoers.d/ntp
上面就是对当前用户免密码
momo78678
帖子: 3
注册时间: 2019-01-14 18:26

Re: <提问> 如何使用Shell实现NTP时间伺服器指定同步

#3

帖子 momo78678 » 2019-01-15 14:00

感谢A大您的回覆,由于在“无”网际网路的场景中需要让客人指定本地局域网上的NTP伺服器,并且客人不会使用终端机指令,只能让客人在GUI的环境下实现此功能。

目前ubuntu 18.04版本中的GUI工具只能指定时区与自动同步,无法指定同步的NTP伺服器为 区网中特定的NTP伺服器。

#!/ bin / sh的
echo“密码”| sudo -S服务ntp停止
echo“密码”| sudo -S ntpdate“118.163.81.63”

我按照A大的建议做了一个脚本脚本包成.sh执行档如上,但是让用户透过点击.sh档两下执行后,却无反应,系统时间不会进行更新。

交叉测试,把脚本中的指令直接放在终端机中执行却是马上生效,系统时间马上更新。

请问我要如何做? 可以实现:让用户透过点击.sh档两下执行后,系统时间马上与指定的NTP伺服器进行更新呢? (或是透过GUI来实现此功能也行)

恳请A大 与兄弟姊妹们帮忙,谢谢^ ^
头像
astolia
论坛版主
帖子: 6386
注册时间: 2008-09-18 13:11

Re: <提问> 如何使用Shell实现NTP时间伺服器指定同步

#4

帖子 astolia » 2019-01-15 16:23

momo78678 写了: 2019-01-15 14:00 目前ubuntu 18.04版本中的GUI工具只能指定时区与自动同步,无法指定同步的NTP伺服器为 区网中特定的NTP伺服器。
可以通过修改系统配置文件来指定ntp伺服器。默认情况下时间同步是通过systemd的timesyncd,是在/etc/systemd/timesyncd.conf里设置[Time]中的NTP=项。
ubuntu 18.04 desktop默认并没有安装ntp和ntpdate,看你的描述中是安装了的,我不清楚你那边的系统上还有没有做其他可能会影响到timesyncd运作的改动,比如执行了timedatectl set-ntp false来禁止timesyncd的时间同步功能。
momo78678 写了: 2019-01-15 14:00 由于在“无”网际网路的场景中需要让客人指定本地局域网上的NTP伺服器
由于默认查询的ntp伺服器是ntp.ubuntu.com,所以还可以通过将ntp.ubuntu.com域名解析到指定ip地址的方式来实现查询指定伺服器。比如修改/etc/hosts文件。如果能控制局域网中的dns伺服器,直接在dns伺服器上设置静态解析ntp.ubuntu.com到指定ip,都不需要客人做任何操作。
momo78678 写了: 2019-01-15 14:00 但是让用户透过点击.sh档两下执行后,却无反应,系统时间不会进行更新。
这个要查一下具体是什么问题,你改成这样再点击运行,然后看看/tmp/a.txt和/tmp/b.txt中是什么内容

代码: 全选

echo "密码" | sudo -S ntpdate "118.163.81.63" >/tmp/a.txt 2>/tmp/b.txt
momo78678
帖子: 3
注册时间: 2019-01-14 18:26

Re: <提问> 如何使用Shell实现NTP时间伺服器指定同步

#5

帖子 momo78678 » 2019-01-16 15:06

收到〜

感谢A大的帮忙,赶紧来试试^ ^
回复