从命令行使用anyconnect进行连接


31

我正在尝试从Linux命令行使用Cisco anyconnect 3.1连接到服务器。我可以连接,但是我必须一次提交一个参数。我想从将在另一台服务器上运行的脚本进行连接。我可以那样做吗?就像是

vpn connect server_add group_name user_name passwd

请向我们显示您要使用的命令。您是否尝试过使用定界符?
Tog 2013年

该命令是/ opt / cisco / anyconnect / bin / vpn connect 10.1.1.1,但是此后它会连接并询问用户名,密码和组。我想要的是将所有这些都传递到一行中。但是我找不到关于这个的任何文档。只是使用图形界面客户端。
凯利·戈德特

Answers:


31

假设/opt/cisco/anyconnect/bin/vpnagentd正在自动运行,应为:

连接

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

替换USERNAMEPASSWORDHOST。将\ny在年底是接受登录旗帜-这是针对我的主人。

注意单引号'而不是双引号"-这是因为双引号告诉Bash作为Bash历史命令来解释字符串中的某些字符,例如感叹号。如果密码包含感叹号,则双引号会使该命令失败,并显示“找不到事件”错误。单引号字符串不附带解释符而传递感叹号。

断开连接

/opt/cisco/anyconnect/bin/vpn disconnect

已使用AnyConnect v3.1.05160进行了测试。


5
如果您的客户端由于证书验证错误而无法连接Certificate is from an untrusted source,而您仍要连接,则y在上述方法中传递一个参数,以使连接命令变为:printf "y\nUSERNAME\nPASSWORD\ny" | /opt/cisco/anyconnect/bin/vpn -s connect HOST。请注意,只有在您完全信任连接的情况下,才进行此操作。否则,可能会有中间人坐在那里偷窥您。
shivams 2015年

1
效果很好(尽管我的版本需要一个GROUPNAME\nUSERNAME\nPASSWORDy。如果您想将密码与命令分开(可能是shell脚本或dotfile键绑定),则可以执行以下操作:cat ~/.anyconnect_credentials | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Sridhar Sarnobat

@SridharSarnobat使用单独的凭据文件是可行的,但是它将在日志中输出您的密码,例如:>> notice: Please respond to banner. MYPASSWORD
Willian Vieira

4

我遇到了同样的困难,尝试从Mac OS X Terminal使用Cisco AnyConnect。要使Cisco vpn命令从标准输入中获取其输入,必须指定-s选项,该选项将Cisco vpn命令置于交互模式。然后,您可以提供以交互方式给出的响应。

您需要给出的响应取决于VPN服务器管理员如何配置服务器。对我来说,vpn互动提示是

Group: 
Username: 
Password: 

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

所以我运行的命令是

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

EOF周围的引号是为了防止在以下输入中使用命令/参数扩展/替换。)

最后的出口是退出Cisco vpn交互模式。


2

我喜欢简化命令行,因此在名为gotowork的shell脚本中使用了上述方法。如上所述,我需要提供组,用户名以及由专用PIN和RSA SecurID密码组成的密码。我不必回答上面的“接受?” 题。除了RSA密码外,所有内容都在脚本中,因此命令行为

$ gotowork <RSA passcode>

我必须以root身份运行。假定PIN为1234。脚本要点:

# 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

使用anyconnect 3.1.05170。在Debian 6,LinuxMint 17上测试


为什么有0\n必要?还是特定于您的公司?
Acumenus 2014年

@ABB就是说输出一个零0,然后是一个换行符,\n然后是用户名,然后是换行符\n……
Matt Friedman

@MattFriedman,我知道它在说什么,但我根本不知道为什么它是必需的。
Acumenus

1
@ABB以交互方式运行并且您的连接使用组时,将枚举可能的组。0则表示“使用第一组”。
jmd_dk'3

2

这就是我在OSX El Capitan上所做的工作。占位符被[方括号]包围。

启用

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

禁用

/opt/cisco/anyconnect/bin/vpn disconnect

*我知道这与上述彼得·S的答案相似。


1
这在El Capitan的一项命令中为我工作,printf "y\n[GROUP]\n\n[PASSWORD]\ny\n" | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Rabea
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.