(Mac) Cisco AnyConnect Secure Mobility Client를 명령 줄에서 조작

어디에 필요가 있는지 모르겠지만, 내가 필요했기 때문에 만들어 보았습니다.

Cisco AnyConnect Secure Mobility Client는 일반적으로 GUI에서 제공하는 VPN 클라이언트입니다.
기동하면 이런 느낌의 화면이 나오고, 미리 설정해 두면 결정된 접속처에 자동적으로 접속해 줍니다만, 인증이 필요한 접속의 경우는 매번 패스워드 입력을 요구됩니다.



이것이 매번 번거로울 수밖에 없었기 때문에, 어떻게든 할 방법이 없는지 조사하고 있었습니다만, 실은 공식 헬프에 커멘드 라인 툴의 기재가 있어, 이 클라이언트를 CLI로부터 기동할 수 있는 것을 알았습니다.


Cisco AnyConnect Secure Mobility Client 관리자 가이드 릴리스 4.2 - AnyConnect 클라이언트 및 설치 프로그램 사용자 지정 및 현지화 [Cisco AnyConnect Secure Mobility Client] - Cisco


AnyConnect CLI 명령 사용
Cisco AnyConnect VPN Client에는 그래픽 사용자 인터페이스를 사용하지 않고 클라이언트 명령을 입력하려는 사용자를위한 명령 줄 인터페이스 (CLI)가 있습니다. 이 절에서는 CLI 명령 프롬프트를 시작하는 방법과 CLI를 통해 사용할 수 있는 명령에 대해 설명합니다.



그러나 실제로이 명령을 터미널에서 실행해도 대화식 쉘이 시작하는 것만으로 결과적으로 계정과 암호를 입력해야하는 것은 동일하게되었습니다.
$ /opt/cisco/anyconnect/bin/vpn connect access.example.com/access_target
Cisco AnyConnect Secure Mobility Client (version 3.1.05178) .

Copyright (c) 2004 - 2013 Cisco Systems, Inc.  All Rights Reserved.


  >> state: Disconnected
  >> state: Disconnected
  >> notice: Ready to connect.
  >> registered with local VPN subsystem.
  >> contacting host (access.example.com/access_target) for login information...
  >> notice: Contacting access.example.com/access_target.
  >> warning: No valid certificates available for authentication.

  >> Please enter your username and password.

Username: 
Password:

이것은 의미가 없으므로 expect 명령을 사용하여 쉘화하고 사용자 이름과 암호를 입력합니다.

vpnauto.sh
#!/bin/sh

# 接続先エイリアスまたはIPアドレス
CONNECTION_ALIAS=access.example.com/access_target
# ユーザー名
USER_NAME=[email protected]
# パスワード
PW=PWPWPW
# タイムアウト
TIMEOUT=5

expect -c "
    set timeout ${TIMEOUT}
    spawn /opt/cisco/anyconnect/bin/vpn connect ${CONNECTION_ALIAS}
    expect \“Username:\”
    send \"${USER_NAME}\n\"
    expect \"Password:\"
    send \"${PW}\n\"
    expect \"state: Connected\"
    exit 0
"

expect는, 쉘안에서 새로운 커멘드 라인 프로세스를 시작해, 그 프로세스와의 입출력을 제어할 수 있는 커멘드. -c 옵션으로 쿼트안에 기재된 expect의 확장 커멘드를 써진 대로 실행해 갑니다.

여기에 설명 된 확장 명령의 개요를 설명하면

set timeout : 타임 아웃 설정.
spawn : 지정된 명령을 새로운 프로세스로 실행
expect: 표준 출력에 출력된 텍스트를 페치 해 일치하는 것이 있으면 계속
send : 표준 입력에 텍스트 보내기

이런 느낌입니다.

에러 핸들링이라든지 아무것도 하고 있지 않기 때문에, 접속에 실패하거나 해도 유저와 패스워드는 보내져 버리므로 주의해 주세요.

그리고는 이 쉘에 실행 권한을 붙여 실행할 뿐입니다.
$ chmod 755 vpnauto.sh
$ ./vpnauto.sh
spawn /opt/cisco/anyconnect/bin/vpn connect access.example.com/access_target
Cisco AnyConnect Secure Mobility Client (version 3.1.05178) .

Copyright (c) 2004 - 2013 Cisco Systems, Inc.  All Rights Reserved.
()
  >> Please enter your username and password.

Username: [email protected]
Password:
  >> state: Connecting
  >> notice: Establishing VPN session...
  >> notice: Checking for profile updates...
  >> notice: Checking for customization updates...
  >> notice: Performing any required updates...
  >> state: Connecting
  >> notice: Establishing VPN session...
  >> notice: Establishing VPN - Initiating connection...
  >> notice: Establishing VPN - Examining system...
  >> notice: Establishing VPN - Activating VPN adapter...
  >> notice: Establishing VPN - Configuring system...
  >> notice: Establishing VPN...
  >> state: Connected
  >> notice: Connected to access.example.com/access_target.
VPN>
$ 

주의점



AnyConnect GUI 클라이언트가 시작된 상태에서 CLI를 실행하면 오류가 발생합니다.
이 경우 GUI를 떨어 뜨린 다음 실행하십시오.
  >> error: Connect not available. Another AnyConnect application is running
or this functionality was not requested by this application.

참고로 한 사이트




expect - 명령 (프로그램) 설명 - Linux 명령 모음 목록


expect - 명령 (프로그램) 설명 - Linux 명령 모음 목록 ...


좋은 웹페이지 즐겨찾기