我设置了 ssh 隧道,这样我就可以通过我们的网关访问工作中的各种计算机。问题是,我不喜欢每次打开计算机或连接/断开互联网时都必须设置这些隧道,所以我希望有一种方法可以让我每次连接到互联网时都自动运行 shell 脚本来设置隧道。我在办公室的工作站上设置了类似的东西,它运行的是 Ubuntu,它使用 /etc/network/if-up.d 和 if-down.d。Mac 上有类似的设置吗?
答案1
答案2
不是内置的;这类事情通常由 OS X 上的 launchd 处理,但网络开启/关闭事件不在其触发器列表中。幸运的是,pymacadmin 的源码包括一个提供此功能的程序 crankd。 这里是一个使用 crankd 执行类似操作的示例(尽管他使用它来启动 Python 模块而不是 shell 脚本,因此细节略有不同)。我还没有尝试过,但看起来你只需要创建一个 crankd plist 文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SystemConfiguration</key>
<dict>
<key>State:/Network/Global/IPv4</key>
<dict>
<key>command</key>
<string>/usr/local/libexec/networkchangescript</string>
</dict>
</dict>
</dict>
</plist>
...然后写入 /usr/local/libexec/networkchangescript 来检测网络是否已启动(AIUI 它会针对任何更改启动,无论是启动、关闭还是横向),并在适当的情况下设置隧道。最后,创建一个 launchd plist 来运行 crankd(有关详细信息,请参阅我链接的示例)。