Bash

打開/關閉openvpn的別名

  • May 22, 2019

*.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.

引用自:https://unix.stackexchange.com/questions/520171