国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

編寫Python腳本批量配置VPN的教程

2019-11-25 17:32:26
字體:
供稿:網(wǎng)友

緣起

大家都知道,最近的網(wǎng)絡(luò)不怎么和諧,速度慢不說,VPN 還總斷,好在云梯 提供了挺多的服務(wù)器可以切換, 但云梯的服務(wù)器又挺多,Linux 的 Network Manager 又不支持批量添加配置,甚至配置文件都不能復(fù)制新建, 每個(gè)服務(wù)器的配置都得手動(dòng)加,非常麻煩。

當(dāng)然,也可以每次切換時(shí)打開配置,光改地址,但是這也非常不方便。

作為一個(gè)合格的開發(fā)人員,當(dāng)然會(huì)想到用程序批量生成配置,我選擇使用 Python。
尋找配置文件的位置

要批量創(chuàng)建配置,首先得知道配置文件在哪里,比如自己的云梯 VPN 地址中包含 example 字樣,這樣找起來就方便了。

復(fù)制代碼 代碼如下:
grep 'example'  ~/.config -r
grep 'example'  /etc/ -r

于是輕松的定位到了配置文件的位置

復(fù)制代碼 代碼如下:
grep: /etc/NetworkManager/system-connections/yunti.pptp.a: Permission denied
grep: /etc/NetworkManager/system-connections/yunti.pptp.b: Permission denied
grep: /etc/NetworkManager/system-connections/yunti.pptp.c: Permission denied

了解配置文件結(jié)構(gòu)

拿一個(gè)配置文件出來看看:

[connection]id=yunti.pptp.tw1uuid=063db9b5-5915-4f3e-8bb4-2fe58abf5be5type=vpnpermissions=user:greatghoul:;autoconnect=false[vpn]service-type=org.freedesktop.NetworkManager.pptpgateway=tw1.example.comrequire-mppe=yesuser=greatghoulrefuse-chap=yesrefuse-eap=yespassword-flags=1refuse-pap=yes[ipv4]method=autodns=8.8.8.8;8.8.4.4;ignore-auto-dns=true

顯然,有這么幾個(gè)部分需要?jiǎng)討B(tài)生成的

  •     connection.id 這個(gè)需要是唯一的
  •     connection.uuid 就是 uuid 生成一個(gè)就好了
  •     connection.permissions 要添加上你的用戶名嘛
  •     vpn.gateway VPN 服務(wù)器的地址
  •     vpn.user VPN 服務(wù)的帳戶名
  •     ipv4.dns 按你喜好配置就好

既然了解了,就開工吧
準(zhǔn)備配置信息及模板

首先,讓我們準(zhǔn)備好材料:

VPN_SERVERS = [  { 'id': 'yunti.pptp.a', 'gateway': 'a.example.com' },  { 'id': 'yunti.pptp.b', 'gateway': 'b.example.com' },  { 'id': 'yunti.pptp.c', 'gateway': 'c.example.com' },]

配置中 uuid 需要?jiǎng)討B(tài)生成了

>>> import uuid>>> str(uuid.uuid1())'0621ba62-888a-11e3-805c-44334c786649'

至于 connection.permissions、vpn.user 和 ipv4.dns 直接寫在配置模板中即可。

tpl.cfg[connection]id=%(id)suuid=%(uuid)stype=vpnpermissions=user:greatghoul:;autoconnect=false[vpn]service-type=org.freedesktop.NetworkManager.pptpgateway=%(gateway)srequire-mppe=yesuser=greatghoulrefuse-chap=yesrefuse-eap=yespassword-flags=1refuse-pap=yes[ipv4]method=autodns=8.8.8.8;8.8.4.4;ignore-auto-dns=true

生成 VPN 連接配置文件

剩下的事,就只有遍歷 VPN 服務(wù)器信息,生成模板了

def add_connection(tpl, conn_info):  filename = os.path.join(CFG_DIR, conn_info['id'])  print ' Creating file:', filename   out = open(filename, 'w')  out.write(tpl % conn_info)  out.close()  os.chmod(filename, 0600)def create_all():  tpl = open(os.path.join(CURRENT_DIR, 'tpl.cfg'), 'r').read()  print 'Creating yunti connection files under', CFG_DIR  for conn_info in VPN_SERVERS:    conn_info.update(uuid=str(uuid.uuid1()))    add_connection(tpl, conn_info)

我測試過,雖然 VPN 配置文件的文件名怎么寫都行,但是如果在 NetworkManager 中修改了該連接的信息,NetworkManager 會(huì)自動(dòng)將該配置文件重命為 Connection Name (也就是配置文件中 id),所以在創(chuàng)建文件時(shí),還是保持文件名與 id 一致才好。

還有一個(gè)注意點(diǎn)是,連接配置文件必須屬于 root:root 并且權(quán)限設(shè)置為 600, 因?yàn)槲覀冃枰ㄟ^ sudo 執(zhí)行腳本,所以這里只需要控制 chmod 就行了。

os.chmod(filename, 0600)

完整的腳本

https://gist.github.com/greatghoul/9066705
享受成果

修改 tpl.cfg 中相關(guān)的用戶名為自己的,然后執(zhí)行下面的命令。

$ sudo python create_yunti_config.py Cleaning up yunti connection files... Removing file: /etc/NetworkManager/system-connections/yunti.pptp.a Removing file: /etc/NetworkManager/system-connections/yunti.pptp.b Removing file: /etc/NetworkManager/system-connections/yunti.pptp.cCreating yunti connection files under /etc/NetworkManager/system-connections Creating file: /etc/NetworkManager/system-connections/yunti.pptp.a Creating file: /etc/NetworkManager/system-connections/yunti.pptp.b Creating file: /etc/NetworkManager/system-connections/yunti.pptp.c

開始使用云梯吧 :)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 庆城县| 西青区| 滨州市| 融水| 乌兰县| 峡江县| 大悟县| 波密县| 正定县| 集安市| 边坝县| 克拉玛依市| 长沙县| 五常市| 抚远县| 延寿县| 西青区| 潢川县| 镇江市| 陵水| 南皮县| 莆田市| 中方县| 株洲市| 衡阳县| 青川县| 临澧县| 仙居县| 通化市| 北宁市| 安义县| 长白| 沁水县| 南郑县| 蒙阴县| 甘泉县| 利津县| 湘潭市| 五莲县| 城口县| 南部县|