引言:VPN是一种在公用网络上建立专用网络,进行加密通讯的网络技术。由于我国的互联网管理策略,正常情况下一些互联网站点是无法访问的,但是在工作和生活中又常常的需要访问这些网站,因此很多情况下选择一款VPN服务是解决此类问题的最简单的方法。
目前,各种主流的操作系统均提供了完善的VPN接入客户端的软件,一般只要按照向导的提示,配置好VPN服务器,账户密码以及VPN连接类型等参数就能方便的接入和使用了。在OSX操作系统中也提供了类似的功能,但是自OSX 10.9启用“钥匙链”功能后,系统配置的密码都是保存在“钥匙链”中,因此VPN配置中的密码也采用同样的处理方式。这给喜欢DIY的朋友们带来了一个小问题,那就是无法使用自动化工具动态修改VPN配置中的密码。而笔者长期使用某个免费试用VPN服务,该服务商每小时会更新一次访问密码并通过Web页面发布。为了方便的使用,笔者需要找到一种方法能自动的获取密码并实现VPN的连接。否则每次在OSX的VPN配置环境中修改密码比较繁琐,且每隔一个小时就需要设置一下。
笔者通过Google发现在OSX提供了一个命令行工具scutil,通过这个工具结合OSX强大的bash脚本可以方便的实现各种自定义的VPN连接控制。
scutil工具是OSX提供的命令行系统配置工具,能够实现命令行环境下实现各种系统配置参数的读写操作,本文仅使用其中对VPN连接的管理和配置功能,即--nc参数下的各种命令的使用。
命令行调用格式:
命令格式说明listlist列出当前所可用VPN连接statusstatus
笔者在OSX网络连接已经配置好名为“FreeVPN”的VPN网络连接,如果需要使用密码连接,只需要使用以下命令行就可以了。
scutil --nc start --pss word MyPassword
注意:由于字体印刷可能的问题,以上命令中所有的连字符都是双连字符
OSX操作系统继承了Unix操作系统强大的脚本功能,通过bash脚本可以实现很多用户的自定义操作,此项功能一直受到程序员和DIY用户的欢迎。在笔者的使用场景中,由于需要每次从固定的网站上获取动态的VPN密码,并调用scutil命令实现VPN的自动接入,因此bash脚本是首选编程语言。
在OSX中内置了很多实用命令行工具,例如curl就是其中一款强大的利用URL进行文件传输访问的工具。通过以下的命令行可以读取http服务器上的数据。
curl -s http://free.vpn/password.txt
其中-s参数为隐藏连接过程中的不必要性能参数的显示。curl还有很多强大的功能,这类不一一介绍,具体方法可以参考官方网站,网址为https://curl.haxx.se/
结合 scutil和 curl,最简单的实现笔者功能脚本代码如下:
需要说明的是笔者使用的这个VPN服务提供的密码文件恰巧是纯文本文件,因此不需要进行任何额外的处理,实际上很多情况下是需要对数据进行规范化处理,去除不需要的干扰符号,可以使用正则表达式等工具来实现这方面的处理工作。
以上脚本仅仅满足了笔者的最基本的需求,实际上通过使用脚本功能,完全可以实现对VPN连接的更多控制,例如实现自动检测VPN状态,并自动进行连接,从而实现类似付费VPN所提供的服务。