遠端管理 Mac OSX 裝置

蘇洋發表於2019-03-11

本文使用「署名 4.0 國際 (CC BY 4.0)」許可協議,歡迎轉載、或重新修改使用,但需要註明來源。 署名 4.0 國際 (CC BY 4.0)

本文作者: 蘇洋

建立時間: 2019年03月11日 統計字數: 4300字 閱讀時間: 9分鐘閱讀 本文連結: https://soulteary.com/2019/03/11/mac-osx-remote-management.html


遠端管理 Mac OSX 裝置

開發裝置一般開放 SSH 埠和訪問許可權就能夠滿足幾乎所有需求,但是如果裝置換成了 Windows 或者 OSX ,這個事情就沒有那麼簡單了,偶爾還是需要登入圖形介面做一些事情。對於我這種家裡區域網有完整開發環境的折騰控,遠端管理 OSX 裝置的需求就出現了。

如果你使用類似 AnyConnect 的方式去連線專有網路進行開發,這個事情可以相對容易的解決,但是會額外帶來一個問題:你的所有流量都會走目標裝置。

而如果使用本地埠轉發、系統PROXY的方案來做,有些客戶端又支援的不是很好,比如我一直在使用的 Remotix ,我購買這款軟體有好幾年了,它能夠讓我在筆記本、平板、甚至是手機上解決一些問題,但是一旦我離開區域網環境,它的“假期就開始了”。

本文將花費十五分鐘的時間,解決這個問題。

反向代理指定應用埠

相比較全部流量都走目標裝置,這個方案明顯更合理。當然,你也可以選擇配置路由表解決上面的問題,不過如果目標裝置有多臺,分佈於多個位置,難道我們要不停切換網路連線狀態嗎。

這裡用到的技術方案主要是:流量反向代理。

我選擇的工具是 github.com/fatedier/fr…,選擇它的原因很簡單,它的程式碼開源。

這個方案需要一臺位於公網的伺服器,前一陣清理服務,正好空閒了兩臺,拿來做這個事情再適合不過了。

配置服務端

這裡的服務端是具備公網 IP 地址的雲伺服器,用來反向代理你在區域網中需要被訪問的裝置。

Ubuntu 18.04 為例,我們進行服務端的配置。訪問 github.com/fatedier/fr… 獲取最新的軟體包。

cd /tmp
wget https://github.com/fatedier/frp/releases/download/v0.24.1/frp_0.24.1_linux_amd64.tar.gz
tar -zxvf frp_0.24.1_linux_amd64.tar.gz
複製程式碼

解壓縮之後,你會看到一堆檔案,其中名稱為 frps 的檔案是和伺服器相關的,而命名為 frpc 則是客戶端相關的檔案。

我們先對應用目錄進行規劃,理想的目錄環境可以是這樣:

.
├── conf # 存放配置檔案
│   └── supervisor.ini
├── frps # 服務端應用
├── frps.ini
└── log # 存放日誌檔案
    ├── frps.log
    └── supervisor.log
複製程式碼

建立必要的目錄,並將之前下載好的應用執行檔案放到這個目錄中。

mkdir -p /data/frp/{conf,log}
mv /tmp/frp_0.24.1_linux_amd64/frps /data/frp
複製程式碼

接著我們來建立一個服務端配置檔案,可以參考下面的配置,並適當修改內容。

[common]
bind_port = 8000
bind_addr = 0.0.0.0

dashboard_addr = 0.0.0.0
dashboard_addr = 8080
dashboard_user = homelab_user
dashboard_pwd  = homelab_pass

token = token_used_by_server_and_client

max_pool_count = 5
max_ports_per_client = 0
tcp_mux = true
複製程式碼

如果你將上面的配置儲存為 frps.ini,接下來就可以執行命令驗證配置是否正確。

/data/frp/frps -c /data/frp/frps.ini
複製程式碼

不出意外,你將看到下面的提示:

2019/03/11 12:30:45 [I] [service.go:124] frps tcp listen on 0.0.0.0:8000
2019/03/11 12:30:45 [I] [root.go:204] Start frps success
複製程式碼

這裡需要額外注意一件事,如果你使用的雲服務開啟了安全組功能,需要額外配置安全組的規則,對上述配置檔案的埠進行放行,如果開啟了 ufw 這類防火牆,也是同理。

為了服務的穩定執行,這裡我們還是使用 supervisor 進行程式管理和執行守護,如果有不會配置的同學可以翻看以往的文章或者自行搜尋。

這裡給出一個基礎的配置參考:

[program:frp]
; 啟動目錄
directory = /data/frp/
; 執行命令
command = /data/frp/frps -c /data/frp/frps.ini
; 隨 supervisord 啟動
autostart = true
; 程式啟動 5s 內沒有異常則認為是正常執行
startsecs = 10
; 程式異常退出後重新啟動
autorestart = true
; 重試啟動程式多少次
startretries = 1000
; 預設使用當前使用者執行應用
;user = soulteary
; 需要手動建立目錄
stdout_logfile = /data/frp/log/supervisor.log
複製程式碼

當然,別忘記重啟 supervisor 讓配置生效,具體操作上一篇文章中有講。

配置客戶端

這裡的客戶端是指你需要被訪問的裝置,或者使用埠轉發規則能夠訪問到目標裝置的路由器、交換機裝置,本文中的客戶端指的是一臺 Mac Book Pro 筆記本。

和配置服務端類似,我們先下載軟體包,並準備應用執行目錄。

wget https://github.com/fatedier/frp/releases/download/v0.24.1/frp_0.24.1_darwin_amd64.tar.gz
tar -zxvf frp_0.24.1_darwin_amd64.tar.gz

mkdir -p ~/Service/frp/{conf,log}
mv frp_0.24.1_darwin_amd64/frpc ~/Service/frp/
複製程式碼

接著建立客戶端的配置檔案,這裡暫定命名為 frpc.ini,具體內容請根據具體情況修改。

[common]
server_addr = 123.123.123.123
server_port = 8000
token = token_used_by_server_and_client

admin_port = 8080
admin_user = homelab_client
admin_pwd  = homelab_client

pool_count = 5
tcp_mux = true

[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
use_encryption = true
use_compression = trye
remote_port = 5900
health_check_type = tcp
health_check_timeout_s = 3
health_check_max_failed = 3
health_check_interval_s = 10
複製程式碼

這裡需要額外注意的是:token 欄位,內容務必和服務端保持一致,否則無法建立連線。

另外,你希望能夠被遠端訪問到的服務,它的 remote_port 同樣需要服務端開放此埠的訪問規則。

接著,我們執行下面的命令,進行測試,看看服務是否聯通。

~/Service/frp/frpc -c ~/Service/frp/frpc.ini
複製程式碼

如果一切正常,你將能夠看到類似下面的日誌:

2019/03/11 12:36:00 [I] [service.go:214] login to server success, get run id [4a62ac3f5f635268], server udp port [0]
2019/03/11 12:36:00 [I] [proxy_manager.go:137] [2a62ac3f5f635268] proxy added: [rdp]
2019/03/11 12:36:00 [I] [health.go:115] [2a62ac3f5f635268] [rdp] health check status change to success
2019/03/11 12:36:00 [I] [proxy_wrapper.go:206] [2a62ac3f5f635268] [rdp] health check success
2019/03/11 12:36:00 [I] [control.go:143] [vnc] start proxy success
複製程式碼

這時,開啟客戶端軟體,建立一個 VNC 連結,伺服器地址填寫雲主機的IP,埠填寫客戶端服務 remote_port ,如果上述配置都正常,那麼你將會看到遠端桌面的登入提示。

Mac OSX 登入提示

輸入正確的使用者名稱和密碼之後,熟悉的桌面就呈現在你的眼前了。

Mac OSX 遠端桌面

Mac OSX 系統上的程式管理,上一篇文章已經提到過,這裡不做贅述,簡單提供一個 supervisor 配置。

rogram:frp]
; 啟動目錄
directory = /Users/soulteary/Service/frp/
; 執行命令
command = /Users/soulteary/Service/frp/frpc -c /Users/soulteary/Service/frp/frpc.ini
; 隨 supervisord 啟動
autostart = true
; 程式啟動 5s 內沒有異常則認為是正常執行
startsecs = 10
; 程式異常退出後重新啟動
autorestart = true
; 重試啟動程式多少次
startretries = 1000
; 預設使用當前使用者執行應用
;user = soulteary
; 需要手動建立目錄
stdout_logfile = /Users/soulteary/Service/frp/log/supervisor.log
複製程式碼

最後

長時間這樣暴露埠,其實並不是理智 & 安全的選擇,為了更加安全的使用這個服務,我們還需要做一些額外的策略,後續我會再更新一篇,詳細介紹如何處理。


我現在有一個小小的折騰群,裡面聚集了一些喜歡折騰的小夥伴。

在不發廣告的情況下,我們在裡面會一起聊聊軟體、HomeLab、程式設計上的一些問題,也會在群裡不定期的分享一些技術沙龍的資料。

喜歡折騰的小夥伴歡迎掃碼新增好友。(請註明來源和目的,否則不會通過稽核)

關於折騰群入群的那些事

相關文章