拥有Cron伙伴总是好事!
一些朋友(不太精通Linux的朋友)请我分享这个经验。我觉得可以写篇博客与大家分享。我们都曾从零开始,有时会忘记并非每个人都是Linux狂热用户——就像我还不是啤酒酿造爱好者一样(暂时!)。
大约一个月前,我和几位老管理员朋友聚会时聊到了VPN。大家讨论了工作和家庭使用的VPN方案。OpenVPN作为优秀的软件解决方案被提及,因其易于部署。其中一人表示希望实现调度功能,以便在更新期间限制访问,并灵活设定实习生仅能在特定时段连接。我们起初大笑,随后意识到他是认真的。这引发了对各公司官僚程序的深入讨论——不得不说我爱BHIS!如果有官僚程序,那一定是在某次会议上随我们酷炫T恤发放的。
朋友们,继续奋斗吧!
回家后我一直在思考限制访问和OpenVPN调度功能的问题。我有个怪癖:总喜欢把琐事变成挑战。我怀疑朋友们是故意这样“害”我——他们就这么邪恶!不得不承认,他们提出的问题虽然看似简单,但解决过程往往能衍生出其他问题的解决方案。
别问!
第二天我决定深入研究调度方案,因为我家实验室正好运行着OpenVPN服务器。在OpenVPN官网稍作调研后,我找到了禁用用户访问和暂停账户的命令行语法(详见https://docs.openvpn.net/docs/access-server/openvpn-access-server-command-line-tools.html#session-management)。
OpenVPN服务器禁用用户命令语法
OpenVPN服务器断开用户连接命令语法
掌握语法后,我创建了Bash脚本以便后续调用断开并禁用用户。注意断开命令支持添加断开原因提示,这个设计很贴心。
我曾在电路板合同制造行业工作,生产过计算机主板、电话设备、SCSI控制器和医疗设备等。大部分功能测试都通过cron任务完成,因为测试第一步总是用脚本重置时间为默认值,从而捕获测试时长以判断是否存在传播延迟问题(尤其是CPU和内存时序)。我们通过Bash脚本在特定时间点启动各类测试,这能有效发现设备总线速度的时序问题,也是当时最简单的实现方式。当然现在肯定有更先进的方案。
创建Bash脚本非常简单:通过SSH登录,提权至root(sudo su),创建脚本目录并进入。由于运行OpenVPN脚本需要权限,此处需root账户。
|
|
使用VI或Nano创建脚本文件(如vi discbanuser.sh或nano discbanuser.sh),这将在当前目录打开空文件discbanuser.sh。
|
|
输入以下内容(注意:运行命令需位于scripts子目录,而非刚创建的目录):
断开并禁用用户的批处理脚本
接下来在~/scripts目录创建解禁用户的脚本unbanuser.sh:
允许用户连接VPN的Bash脚本
设置文件执行权限(注意ls使用小写L):
|
|
更改权限:
|
|
脚本可执行后,通过crontab调度任务。Cron是Linux任务调度器,所有用户都曾用它安排重启、更新等任务。有个关于用脚本自动化琐事的趣闻:https://what.thedailywtf.com/topic/17997/now-that-s-what-i-call-hacker 说实话,我还在等BHIS给我们配联网咖啡机……
继续操作:
在OpenVPN虚拟机中输入:
|
|
这将打开当前用户的crontab文件(-e表示编辑)。文件已包含语法说明:
调用Bash脚本的Crontab文件
如图所示,我已添加对discbanuser.sh和unbanuser.sh的调用,这两个任务将分别在每周一晚上10:00和10:30运行。保存文件后即可测试。
我使用之前创建的ricktest账户登录VPN,等待服务器断开连接的消息:
成功收到断开提示及脚本中预设的说明信息!
尝试重新连接VPN服务器:
符合预期!
在解禁脚本运行后再次测试,登录功能恢复。
这个简单示例能为Linux新手和我的朋友们提供crontab的入门实践。可见定时任务和Bash脚本的应用潜力无限。
别忘了查看前文链接获取更多有趣的高级示例!