systemd デバイスで Expect を実行すると、sh 構文エラーが発生します。

systemd デバイスで Expect を実行すると、sh 構文エラーが発生します。

systemdexpectVPNクライアントにログイン資格情報を提供するスクリプトを呼び出すセルを使用して、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

一般的なバイナリ実行ファイルによると、これがなぜshsystemdfilenetExtender

/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初心者のための操作方法についてのアドバイスはありますか?

ベストアンサー1

おすすめ記事