web-dev-qa-db-ja.com

forticlient VPN接続をスクリプトから切断する方法は?

Linuxで、VPNに接続し、いくつかのタスクを処理してから切断するbashスクリプトを作成する必要があります。

VPNに接続するには、forticlient ssl vpnを使用します(フォーティネットと同様ですが、代わりにVPN用です)。例えば:

./forticlientsslvpn_cli --server 172.17.97.85:10443 --vpnuser forti

後でスクリプトから切断する方法を知っている人はいますか?

1
Mono86

このページで、誰かがクライアントの周りに切断を処理するための期待スクリプトを作成しました http://euer.krebsco.de/scripting-the-fortigate-vpn-client.html

#!/usr/bin/expect -f
# cd into the 64 bit folder of the client
# usage: efort.exp

spawn ./forticlientsslvpn_cli --server <VPNIP>:<VPNPORT> --vpnuser <VPNUSER> 2>&1
log_user 0
send_user "Logging in\n"
expect "Password for VPN:"
send "<VPNPASSWORD>\n"

# i needed ths for 'certificate error'
expect "Would you like to connect to this server"
send "Y\n"
send_user "Beginning to connect\n"
expect "STATUS::Tunnel running"
send_user "Tunnel running!\n"

# this is how long the next expect waits for pattern match, in seconds
set timeout 90001
expect "STATUS::Tunnel closed"
send_user "Tunnel closed!\n"
send_user "Dying\n"
close
exit

最後に、スクリプトをエンタープライズループして完了です!

#!/bin/sh
cd "$(dirname "$(readlink -f "$0")")"
while sleep 1;do
    expect efort.exp
    echo "Restarting forticlient !"
done
1
chrisw9808

あなたの場合は、forticlientsslvpn_cliプロセスのPIDを記録し、SIGHUP、SIGQUIT、またはSIGTERMを送信するだけです。優先信号は、正常に切断する信号です。少し汚い解決策は(おそらくあなたにとっては十分かもしれませんが)killall -s SIG... forticlientsslvpn_cliだけを使用することです。

FortigateデバイスはCiscoスタイルのIPsec接続もサ​​ポートしており、Linuxで使用できるソフトウェアクライアントは複数あるため、SSLVPNクライアントを置き換えることも別の方法です。

1
sam_pan_mariusz