在“使用 SSH tunnel, NGINX reverse proxy 自製 ngrok 服務”這篇文章中,教大家如何自製 ngrok。但是如果在家裡面的電腦重開機或重新登入之後,就必須要再次執行 ssh 指令,才能再次建立 SSH Reverse Tunnel。
如果內部的電腦是 Mac ,可以利用下面的方法開機時自動連線並建立 SSH Reverse Tunnel。並且可以做到:
- 使用特定使用者帳號執行。
- 當 tunnel 斷線時,自動嘗試再連線。
建立、編輯開機自動執行之 plist 檔
在 /Library/LaunchDaemons 底下建立與編輯 server.example.client.myuser.home.plist
sudo vi /Library/LaunchDaemons/server.example.client.myuser.home.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>Label</key>
<string>server.example.client.myuser.home</string>
<key>ProgramArguments</key>
<array>
<string>ssh</string>
<string>-N</string>
<string>-o ServerAliveInterval=15</string>
<string>-o TCPKeepAlive=yes</string>
<string>-o ServerAliveCountMax=20</string>
<string>-o ExitOnForwardFailure=yes</string>
<string>-i</string>
<string>/Users/myuser/.ssh/id_rsa</string>
<string>-R 3000:localhost:3000</string>
<string>[email protected]</string>
</array>
<key>UserName</key>
<string>myuser</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
載入自動執行檔
sudo launchctl load /Library/LaunchDaemons/server.example.client.myuser.home.plist
如此就可以達成開機自動執行的目標。
如果需要修改檔案內容,則:
- 先卸載:上面的指令再執行一次,但 load 改成 unload。
- 編輯檔案
- 再次載入:上面的指令再執行一次,使用 load。