forticlientssl-vpn_cli завершается до того, как токен подтверждения передается с использованием ожидаемого - PullRequest
0 голосов
/ 14 сентября 2018

Я хотел бы автоматизировать вход в VPN с помощью forticlient.Я автоматически передаю пароль с помощью команды expect.После правильного пароля я получаю верификационный токен, но прежде чем записать его в консоль, скрипт завершается.Это мой сценарий:

#!/bin/bash

/usr/bin/expect << EOF
spawn /opt/forticlient-sslvpn/64bit/forticlientsslvpn_cli --server server.com:443 --vpnuser user --keepalive
expect "Password for VPN:"
send "MyPaSsWoRd\r"
expect "Would you like to connect to this server? (Y/N)"
send "Y\r"
expect "A FortiToken code is required for SSL-VPN login authentication."
expect EOF

Как я могу прочитать токен со стандартного ввода или есть лучший способ решить эту проблему?Есть ли способ, как создать какой-нибудь файл конфигурации, в котором будет указан адрес сервера, пользователь, пароль и т. Д., И вставить его в forticlient_cli?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Я не мог решить мою проблему с expect, поэтому я использовал python3 lib pexpect .Это мой результат, который отлично работает:

import pexpect

child = pexpect.spawn('/opt/forticlient-sslvpn/64bit/forticlientsslvpn_cli --server server.com:443 --vpnuser user --keepalive', encoding='utf-8')
child.expect('Password for VPN:')
child.sendline('PaSsWoRd')
child.expect('Would you like to connect to this server\? \(Y\/N\)')
child.sendline('Y')

child.interact()
child.kill(1)
print('is alive:', child.isalive())
0 голосов
/ 14 сентября 2018

Когда вы говорите "сценарий заканчивается", я предполагаю, что он истекает примерно через 20 секунд

Это то, что я думаю вы спрашиваете:

expect "A FortiToken code is required for SSL-VPN login authentication."
send_user "Enter the token: "
gets stdin token
send -- "$token\r"
# then, you interact with the connection ...
...