systemd
expect
VPNクライアントにログイン資格情報を提供するスクリプトを呼び出すセルを使用して、LinuxコンピュータからVPN(SonicWall NetExtender)に接続するプロセスを自動化しようとしています。ファイルは次のようになります。
netextender.service
[Unit]
Description=SonicWall NetExtender VPN
PartOf=systemd-networkd.service systemd-resolved.service
[Service]
Type=simple
EnvironmentFile=/etc/.netExtender
## environment file spec:
# DOMAIN=
# HOSTNAME=
# PASSWORD=
# TOTP_SEED=
# USERNAME=
ExecStartPre=/bin/sh -c '/usr/bin/pkill -9 netExtender || true'
ExecStart=/usr/local/bin/netextender.expect
[Install]
WantedBy=network-online.target
netextender.expect
#!/usr/bin/expect -f
exp_internal 0
set timeout -1
set TOTP_CODE [exec totpgen $env(TOTP_SEED)]
spawn netExtender --dns-only-local --ppp-async --vpntype=wireguard "$env(HOSTNAME)"
expect {
"*\nUser: " {
send -- "$env(USERNAME)\n"
exp_continue
} "*\nPassword: " {
send -- "$env(PASSWORD)\n"
exp_continue
} "*\nDomain: " {
send -- "$env(DOMAIN)\n"
exp_continue
} "*\nDo you want to proceed? (Y:Yes, N:No, V:View Certificate)" {
send -- "y\n"
exp_continue
} "*\nOne Time Password: " {
send -- "$TOTP_CODE\n"
}
}
interact
expect
対話型シェルから呼び出すと、スクリプトはVPNクライアントを正常に起動しますが、次から呼び出すと次のエラーで失敗しますsystemd
。
sh: -c: line 1: syntax error near unexpected token `('
sh: -c: line 1: `mkdir -p (null)/.netExtenderCerts/PUB_CERT'
spawn_id: spawn id exp3 not open
while executing
interact"
file "/usr/local/bin/netextender.expect" line 24)
netextender.service: Main process exited, code=exited, status=1/FAILURE
一般的なバイナリ実行ファイルによると、これがなぜsh
。systemd
file
netExtender
/usr/bin/netExtender: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=5c2daed3c6e1e9f7b7e8ec62f466e6967618c68f, stripped
expect
初心者のための操作方法についてのアドバイスはありますか?