Bash
打開/關閉openvpn的別名
我
*.ovpn
的目錄中有一個配置列表/etc/openvpn/ovpn_tcp/
在該目錄中,我確實有一個名為的 bash 腳本
go
包括以下程式碼,它將從列表中選擇隨機伺服器並連接到它。
#!/bin/bash set -- *.nordvpn.com.tcp.ovpn shift $(( RANDOM % $# )) openvpn "$1"
我嘗試通過以下方式創建別名來呼叫腳本。
alias vpn='bash /etc/openvpn/ovpn_tcp/go'
但它一直給我一個錯誤
Options error: In [CMD-LINE]:1: Error opening configuration file: *.nordvpn.com.tcp.ovpn Use --help for more information.
但是,如果我通過以下別名呼叫它,那麼它將毫無問題地執行。
alias vpn='cd /etc/openvpn/ovpn_tcp/ && bash go'
通常我打開
screen
會話以連接到vpn
然後將其分離,一旦完成,我重新連接到它,然後使用CTRL + C
取消vpn
連接。我正在尋找的是設置
2
別名1-別名打開vpn,無需打開
screen
會話或忙目前終端,一旦vpn連接,我想通過呼叫curl ifconfig.co
查看IP
.2-別名關閉vpn。
注意:
alias
如果我們已經連接到 VPN,是否可以阻止打開 vpn 執行?
set
在命令中使用完整路徑screen
以分離模式執行- 使用
case ... esac
構造來製作啟動/停止腳本。也許是這樣的:
#!/bin/bash start(){ status # Print IP before connection set -- /etc/openvpn/ovpn_tcp/*.nordvpn.com.tcp.ovpn shift $(( RANDOM % $# )) screen -S vpn -dm openvpn "$1" # connect sleep 5 # wait for connection status # Print IP after connection } stop(){ screen -S vpn -X quit pkill -f ovpn } status(){ printf 'IP: %s\n' "$(curl -s ifconfig.co)" } case "$1" in start) if screen -ls | grep -w vpn; then echo "Vpn already connected"; status else start fi ;; stop) stop ;; *) status ;; esac
然後您可以將其添加為別名:
alias vpn='bash /etc/openvpn/ovpn_tcp/go'
用法:
# Start connection vpn start # Stop connection vpn stop # get status vpn
作為別名的替代方法,您可以將腳本放在您
~/bin
的$PATH
.