自动化证书创建 OpenVPN
Automatize the cert creation OpenVPN
我不知道为什么当我使用 SSH 运行 我的脚本时出现错误,但是当我从我的 CA 服务器 运行 bash 时一切正常。
我根据这篇文章安装了我的 VPN 服务器 https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-18-04
我为 VPN 创建写了一个 bash,但是当我尝试 运行 它时,我需要在某个时候通过 SSH 连接到另一台服务器。如果我在其中使用 SSH 启动脚本,我会收到一条错误消息:
>./easyrsa: 341: set: Illegal option -o echo
我的 bash 包含这个和来自我的 VPN 服务器的 运行:
sshpass -p $PASSWORD ssh username@"CA server IP" "/home/username/makevpn.sh $NAME $PASSWORD"
和makevpn.sh包含这个:
>./easyrsa sign-req client $NAME
在此之后 运行 似乎没问题,但给出上面的错误。
出现这个错误后我尝试阅读,但一无所获。 :( 希望有人能提供帮助,因为经过 4 天的故障排除后我已经绝望了。
VPN脚本代码
#!/bin/sh
clear
read -p "Please enter the name of the new certificate : " NAME
read -p "Please enter the Password : " PASSWORD
cd /home/username/EasyRSA-3.0.7/
./easyrsa gen-req $NAME nopass
echo "gen-req done"
cp /home/username/EasyRSA-3.0.7/pki/private/$NAME.key /home/username/client-configs/keys/
echo "cp done"
sshpass -p $PASSWORD scp /home/username/EasyRSA-3.0.7/pki/reqs/$NAME.req username@192.168.1.105:/tmp
echo "scp done"
sshpass -p $PASSWORD ssh username@192.168.1.105 "/home/username/makevpn.sh $NAME $PASSWORD"
echo "ssh done"
cp /tmp/$NAME.crt /home/username/client-configs/keys/
echo "last CP done"
sudo /home/username/client-configs/make_config.sh $NAME
echo "All Done"
CA 服务器上的代码
#!/bin/sh
NAME=
PASSWORD=
cd /home/username/EasyRSA-3.0.7/
echo "CD Done"
./easyrsa import-req /tmp/$NAME.req $NAME
echo "Import-req done"
./easyrsa sign-req client $NAME
echo "Sign-req done"
sshpass -p $PASSWORD scp /home/username/EasyRSA-3.0.7/pki/issued/$NAME.crt username@192.168.1.103:/tmp
echo "Scp done"
我刚刚浏览了那个 easyrsa 脚本的代码 here。这一个可能与您的不同,因为错误行是 341。在 Github 页面上,它是第 352 行,它是名为 cleanup
的函数的一部分。似乎此功能仅作为 trap
附加(第 2744 行)。陷阱用于捕获信号,如 sigint
(中断),通常在终端上用 ctrl+c
发送(并且可能显示像 ^C 的字符)。该错误仅显示在您的脚本中的原因是它可能会导致发出一个信号,如果您通过 ssh 手动 运行 它通常不会收到该信号。
错误本身真的不是问题。
来自 Github 的代码:
第 352 行:
(stty echo 2>/dev/null) || { (set -o echo 2>/dev/null) && set -o echo; }
第 2744 行:
trap "cleanup" EXIT
似乎该行只是试图重新打开您键入的字符的终端输出(通过 stty echo
)。有时程序会在某处禁用终端输出,然后在程序完成时重新启用它。然而,如果你要在中途终止程序(例如使用 ctrl+c
),你的程序将终止,终端输出仍然被禁用。这会使终端看起来像被冻结了。它仍然可以工作,但不会显示您用键盘键入的字符。陷阱的要点是确保无论程序如何退出都重新启用终端输出。
更多信息...
第 567 行有一个禁用回显的函数。看起来关键是不要在屏幕上显示密码。如果您在读取密码期间终止该程序,回声将在终端上保持禁用状态。错误的原因可能更多地与您 运行 安装脚本的方式有关。无论出于何种原因,它都会导致 stty echo
失败。第 352 行假设失败是由于 stty echo
不是有效命令。因此,如果失败 (||
),它会尝试使用不同的方法 (set -o echo
) 来启用回显。如果我尝试 运行 在我的终端上,我也会得到一个错误 (bash 4.2):
-bash: set: echo: invalid option name
我不知道为什么当我使用 SSH 运行 我的脚本时出现错误,但是当我从我的 CA 服务器 运行 bash 时一切正常。
我根据这篇文章安装了我的 VPN 服务器 https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-18-04
我为 VPN 创建写了一个 bash,但是当我尝试 运行 它时,我需要在某个时候通过 SSH 连接到另一台服务器。如果我在其中使用 SSH 启动脚本,我会收到一条错误消息:
>./easyrsa: 341: set: Illegal option -o echo
我的 bash 包含这个和来自我的 VPN 服务器的 运行:
sshpass -p $PASSWORD ssh username@"CA server IP" "/home/username/makevpn.sh $NAME $PASSWORD"
和makevpn.sh包含这个:
>./easyrsa sign-req client $NAME
在此之后 运行 似乎没问题,但给出上面的错误。
出现这个错误后我尝试阅读,但一无所获。 :( 希望有人能提供帮助,因为经过 4 天的故障排除后我已经绝望了。
VPN脚本代码
#!/bin/sh
clear
read -p "Please enter the name of the new certificate : " NAME
read -p "Please enter the Password : " PASSWORD
cd /home/username/EasyRSA-3.0.7/
./easyrsa gen-req $NAME nopass
echo "gen-req done"
cp /home/username/EasyRSA-3.0.7/pki/private/$NAME.key /home/username/client-configs/keys/
echo "cp done"
sshpass -p $PASSWORD scp /home/username/EasyRSA-3.0.7/pki/reqs/$NAME.req username@192.168.1.105:/tmp
echo "scp done"
sshpass -p $PASSWORD ssh username@192.168.1.105 "/home/username/makevpn.sh $NAME $PASSWORD"
echo "ssh done"
cp /tmp/$NAME.crt /home/username/client-configs/keys/
echo "last CP done"
sudo /home/username/client-configs/make_config.sh $NAME
echo "All Done"
CA 服务器上的代码
#!/bin/sh
NAME=
PASSWORD=
cd /home/username/EasyRSA-3.0.7/
echo "CD Done"
./easyrsa import-req /tmp/$NAME.req $NAME
echo "Import-req done"
./easyrsa sign-req client $NAME
echo "Sign-req done"
sshpass -p $PASSWORD scp /home/username/EasyRSA-3.0.7/pki/issued/$NAME.crt username@192.168.1.103:/tmp
echo "Scp done"
我刚刚浏览了那个 easyrsa 脚本的代码 here。这一个可能与您的不同,因为错误行是 341。在 Github 页面上,它是第 352 行,它是名为 cleanup
的函数的一部分。似乎此功能仅作为 trap
附加(第 2744 行)。陷阱用于捕获信号,如 sigint
(中断),通常在终端上用 ctrl+c
发送(并且可能显示像 ^C 的字符)。该错误仅显示在您的脚本中的原因是它可能会导致发出一个信号,如果您通过 ssh 手动 运行 它通常不会收到该信号。
错误本身真的不是问题。
来自 Github 的代码:
第 352 行:
(stty echo 2>/dev/null) || { (set -o echo 2>/dev/null) && set -o echo; }
第 2744 行:
trap "cleanup" EXIT
似乎该行只是试图重新打开您键入的字符的终端输出(通过 stty echo
)。有时程序会在某处禁用终端输出,然后在程序完成时重新启用它。然而,如果你要在中途终止程序(例如使用 ctrl+c
),你的程序将终止,终端输出仍然被禁用。这会使终端看起来像被冻结了。它仍然可以工作,但不会显示您用键盘键入的字符。陷阱的要点是确保无论程序如何退出都重新启用终端输出。
更多信息...
第 567 行有一个禁用回显的函数。看起来关键是不要在屏幕上显示密码。如果您在读取密码期间终止该程序,回声将在终端上保持禁用状态。错误的原因可能更多地与您 运行 安装脚本的方式有关。无论出于何种原因,它都会导致 stty echo
失败。第 352 行假设失败是由于 stty echo
不是有效命令。因此,如果失败 (||
),它会尝试使用不同的方法 (set -o echo
) 来启用回显。如果我尝试 运行 在我的终端上,我也会得到一个错误 (bash 4.2):
-bash: set: echo: invalid option name