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
초보자를 위한 작동 방법에 대한 조언이 있나요?