Conecte-se usando anyconnect na linha de comando

31

Estou tentando usar o Cisco anyconnect 3.1 da linha de comando do Linux para conectar-se a um servidor. Eu posso conectar, mas tenho que enviar um parâmetro por vez. Gostaria de me conectar a partir de um script que será executado em outro servidor. Posso fazer isso? Algo como

vpn connect server_add group_name user_name passwd
Kelly Goedert
fonte
Por favor, mostre-nos o comando que você deseja usar. Você já tentou usar delimitadores?
Tog
O comando foi / opt / cisco / anyconnect / bin / vpn connect 10.1.1.1 Mas depois disso, ele se conecta e solicita nome de usuário, senha e grupo. O que eu quero é passar tudo isso em uma linha. Mas não consigo encontrar documentos sobre isso. Apenas usando o cliente de interface gráfica.
22613 Kelly Goedert

Respostas:

31

Supondo que /opt/cisco/anyconnect/bin/vpnagentdesteja sendo executado como deveria ser automaticamente:

Para conectar :

printf 'USERNAME\nPASSWORD\ny' | /opt/cisco/anyconnect/bin/vpn -s connect HOST

Substituir USERNAME, PASSWORDe HOST. O \nyfinal é aceitar o banner de login - isso é específico para o meu host.

Observe as aspas simples em 'vez de aspas duplas "- isso ocorre porque as aspas duplas dizem ao Bash para interpretar certos caracteres dentro de strings, como pontos de exclamação, como comandos do histórico do Bash. As aspas duplas farão com que esse comando falhe com um erro "evento não encontrado" se a senha contiver um ponto de exclamação. As strings de aspas simples passam pontos de exclamação sem interpretá-las.

Para desconectar :

/opt/cisco/anyconnect/bin/vpn disconnect

Isto foi testado com AnyConnect v3.1.05160.

Acumenus
fonte
5
No caso do seu cliente não se conectar devido a um erro de validação do certificado Certificate is from an untrusted source, e você ainda deseja se conectar, em seguida, passar um yparâmetro no método acima, para que o comando para conectar-se: printf "y\nUSERNAME\nPASSWORD\ny" | /opt/cisco/anyconnect/bin/vpn -s connect HOST. Observe que faça isso apenas no caso de confiar absolutamente na sua conexão; caso contrário, pode haver um intermediário sentado e bisbilhotando você.
shivams
1
Funciona lindamente (embora minha versão precise de um GROUPNAME\nUSERNAME\nPASSWORDy. Se você deseja manter sua senha separada do comando (que pode ser um script de shell ou uma ligação de chave dotfile), você pode fazer o seguinte:cat ~/.anyconnect_credentials | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Sridhar Sarnobat 4/11
@SridharSarnobat O uso de um arquivo separado para as credenciais funciona, mas ele imprime sua senha no log da seguinte maneira:>> notice: Please respond to banner. MYPASSWORD
Willian Vieira
4

Corri para a mesma dificuldade, tente usar o Cisco AnyConnect do Mac OS X Terminal. Para que o comando Cisco vpn receba sua entrada da entrada padrão, é necessário especificar a opção -s, que coloca o comando Cisco vpn no modo interativo. Em seguida, você pode fornecer as respostas que você fornece no modo interativo.

As respostas que você precisa fornecer dependem de como o administrador do servidor VPN configurou o servidor. Para mim, os prompts interativos da VPN são

Group: 
Username: 
Password: 

Blah, blah, blah, ...
accept? :

Então o comando que eu corro é

$ /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.com <<"EOF"
0
username
password
y
exit
EOF

(As aspas ao redor do EOF são para impedir a expansão / substituição de comando / parâmetro na seguinte entrada.)

A saída no final é sair do modo interativo Cisco vpn.

Peter Schoenrank
fonte
2

Eu gosto de simplificar a linha de comando, então eu uso a abordagem acima em um script de shell chamado gotowork. Como acima, eu preciso fornecer o grupo, meu nome de usuário e uma chave de acesso composta por um PIN privado mais uma senha de RSA SecurID. Não preciso responder ao "aceitar?" Acima questão. Tudo, exceto o código de acesso RSA, está no script; portanto, a linha de comando é

$ gotowork <RSA passcode>

Eu tenho que executá-lo como root. Suponha que o PIN seja 1234. O essencial do script:

# put the interactive answers into a text file
echo -e "0\nusername\n1234$1\n" > /tmp/answers.txt
# find the path to the anyconnect executables
ciscopath="$(dirname $(find /opt/cisco -depth -name vpnagentd))"
# make sure the anyconnect daemon is running
[ $(pidof vpnagentd) ] || $ciscopath/vpnagentd
# connect
$ciscopath/vpn -s < /tmp/answers.txt connect remote.mycompany.com

Usando qualquer conexão 3.1.05170. Testado no Debian 6, LinuxMint 17

PetieRay
fonte
Por que é 0\nnecessário? Ou é específico da sua empresa?
Acumenus
@ABB isso é apenas dizendo saída de um zero 0, seguido por uma nova linha \nseguida por nome de usuário, seguido por uma nova linha \netc ...
Matt Friedman
@ MattFriedman, eu sei o que está dizendo, mas não sei por que é necessário.
Acumenos
1
@ABB Ao executar interativamente e sua conexão usar grupos, os grupos possíveis serão enumerados. 0então significa "use o primeiro grupo".
22418 jmd_dk
2

Foi isso que funcionou para mim no OSX El Capitan. Os espaços reservados são cercados por [colchetes].

Ativar

/opt/cisco/anyconnect/bin/vpn -s connect [HOST_ADDRESS] <<"EOF"
[VPN_USERNAME]
[VPN_PASSWORD] 
y
EOF

Desabilitar

/opt/cisco/anyconnect/bin/vpn disconnect

* Eu sei que isso é semelhante à resposta de Peter S. acima.

adampasz
fonte
1
Isso funcionou para mim em um comando para o El Capitan,printf "y\n[GROUP]\n\n[PASSWORD]\ny\n" | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Rabea