使用某些wifi時如何使用nmcli始終連接到vpn?
使用 nm-applet,很容易保存 VPN 連接和連接的使用者名+密碼,然後在使用某個 Wi-Fi 連接時自動連接到它。它將始終自動連接到它而無需輸入密碼。
如何在終端使用
nmcli
和其他命令實現這一點?我正在嘗試編寫腳本,以便更輕鬆地部署更多連接並對其進行編輯。到目前為止,我只設法
nmcli connection import type openvpn file ned.ovpn
我還注意到保存的連接可以在
/etc/NetworkManager/system-connections/
我試圖將相同的設置從我的筆記型電腦復製到我的桌面,但似乎沒有任何改變——它似乎沒有看到/更改這些設置。
這是我最初評論的詳細解釋。目標是了解使用 CLI 工具nmcli的等效項,而無需瀏覽所有文件以查明使用者在 GUI 工具上知道的設置:借助此 GUI 工具nm-applet的臨時幫助,它必須在某個地方(甚至不是同一個系統)具有等效設置。這只是一種通用方法,可用於除此處考慮的設置之外的任何其他設置。
涉及到兩個連接:我將它們稱為main和myVPN,它在使用main時會自動連接。此處更改將在main上完成,這是必須檢查的。
$ nmcli connection show NAME UUID TYPE DEVICE main cfa5be23-925a-4273-b5de-2f9adaac8782 wifi -- myVPN 0d9e60ef-6b5e-4f65-8312-8db428589866 vpn --
要顯示 main 的配置,請使用以下任一選項:
nmcli connection show id main nmcli connection show uuid cfa5be23-925a-4273-b5de-2f9adaac8782
將在許多其他行中轉儲,例如:
connection.id: main connection.uuid: cfa5be23-925a-4273-b5de-2f9adaac8782 connection.type: 802-11-wireless
$$ … $$ 因此,首先將所有內容轉儲到一個文件中。一些輸出是本地化的,所以最好先做
export LANG=C.UTF-8
(如果以後應該在網際網路上搜尋或比較特定的設置名稱或值,這將有所幫助):nmcli c show id main > /tmp/before
使用已知功能的 GUI 工具nm-applet,將 VPN myVPN添加到 main:
再次轉儲:
nmcli c show id main > /tmp/after
現在
diff
可以比較並顯示發生了什麼變化:$ diff -u /tmp/before /tmp/after --- /tmp/before 2019-05-04 10:47:43.410149358 +0200 +++ /tmp/after 2019-05-04 10:47:58.798252044 +0200 @@ -15,7 +15,7 @@ connection.master: -- connection.slave-type: -- connection.autoconnect-slaves: -1 (default) -connection.secondaries: -- +connection.secondaries: 0d9e60ef-6b5e-4f65-8312-8db428589866 connection.gateway-ping-timeout: 0 connection.metered: unknown connection.lldp: default
所以這意味著之前不顯眼的設置
connection.secondaries
被設置為myVPN的 UUID:0d9e60ef-6b5e-4f65-8312-8db428589866
。nm-settings(5)在連接設置中講述它:字元串的輔助數組
$$ $$ 啟動基本連接本身時應啟動的連接 UUID 列表。目前僅支持 VPN 連接。
您現在可以使用以下命令再次清除與 VPN 的任何自動連接:
nmcli c modify id main connection.secondaries ''
並再次添加myVPN(它是一個數組,因此
+
):nmcli c modify id main +connection.secondaries 0d9e60ef-6b5e-4f65-8312-8db428589866
使用一些膠水程式碼(從 id 等檢索 uuid),現在可以自動化。
當然,相應的行是在某個文件中的某處添加或刪除的
/etc/NetworkManager/
,但這不應該被依賴。注意:在寫這個答案之前我不知道這個設置,我只是按照我說的去做。