打开/关闭 openvpn 的别名

打开/关闭 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,无需打开会话或忙于当前终端,一旦VPN连接,我想通过调用查看.1-别名screen来确保它已连接。curl ifconfig.coIP

2- 关闭 VPN 的别名。


笔记:

alias如果我们已经连接到 VPN,是否可以阻止打开 VPN 运行?

答案1

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

相关内容