Bash

在 bash 腳本中建立 openvpn 隧道

  • November 23, 2012

我正在嘗試編寫一個腳本,該腳本將在電腦啟動時建立一個 openvpn 隧道。主要問題在於輸入pkcs12密碼。我意識到以純文字形式儲存密碼是非常糟糕的做法,但我對此並不太在意——電腦在所有其他方面都非常安全,所以我非常有信心除了我之外沒有人會訪問它查看密碼。

我添加了--management--management-query-passwords選項,以便可以通過 telnet 會話輸入密碼。當我手動執行此操作時效果很好,但是當我嘗試使用 bash 腳本自動執行此操作時,它會失敗。我的猜測是,要麼我沒有正確地在密碼行之後返回墨盒,要麼其他一些垃圾值作為輸入潛入 telnet 會話。以下是相關的程式碼位(xxx 表示已分類的內容):

$ cat user.ovpn
#OpenVPN Server conf
tls-client
client
dev tun
proto udp
tun-mtu 1400
remote xxxxxxxxxxxxxxxxxxx 1194
pkcs12 user.p12
cipher AES-256-CBC
comp-lzo
verb 3
ns-cert-type server
tls-remote xxxxxxxxxxxxxxxxxxxxxxx
management 127.0.0.1 5558
management-query-passwords

$ cat telnet_commands.sh
#!/bin/bash
echo "open 127.0.0.1 5558"
sleep 1
echo -e "password 'Private Key' xxxxxxxxxx\r\n"

$ nohup openvpn user.ovpn &
$ ./telnet_commands.sh | telnet

$ #manually check whether this worked:
$ telnet 127.0.0.1 5558
Escape character is '^]'.
>INFO:OpenVPN Management Interface Version 1 -- type 'help' for more info
>PASSWORD:Need 'Private Key' password

顯然這樣不行——openvpn telnet管理界面還在等待輸入密碼。

只是想提一下(至少在 Ubuntu 12.04 上)openvpn 有**–askpass /your/file**參數,它從文件中讀取私鑰密碼。

我的工作案例稍作修正:

nohup openvpn /etc/init.d/ovpn/Userxxx.ovpn &
/etc/init.d/ovpn/telnet_commands.sh

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