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