Bash
在 bash 腳本中建立 openvpn 隧道
我正在嘗試編寫一個腳本,該腳本將在電腦啟動時建立一個 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