在“使用 SSH tunnel, NGINX reverse proxy 自製 ngrok 服務”這篇文章中,教大家如何自製 ngrok。但是如果在家裡面的電腦重開機或重新登入之後,就必須要再次執行 ssh 指令,才能再次建立 SSH Reverse Tunnel。

如果內部的電腦是 Mac ,可以利用下面的方法開機時自動連線並建立 SSH Reverse Tunnel。並且可以做到:

  1. 使用特定使用者帳號執行。
  2. 當 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

如此就可以達成開機自動執行的目標。

如果需要修改檔案內容,則:

  1. 先卸載:上面的指令再執行一次,但 load 改成 unload。
  2. 編輯檔案
  3. 再次載入:上面的指令再執行一次,使用 load。

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料