gpt4 book ai didi

python - 通过 Python 连接 CISCO Anyconnect VPN

转载 作者:行者123 更新时间:2023-12-01 03:13:07 27 4
gpt4 key购买 nike

我正在尝试通过 python 函数连接到 CISCO Anyconnect VPN。我已经看到这里给出的方法: Connect CISCO Anyconnect VPN via bash

但首先我有几个问题,第一个是 Python 新手,第二个是不愿意使用除 https://github.com/cernekee/stoken 之外的任何/很少的第三方模块/库。 .

在这里,stoken 为我提供 RSA SecureID token ,以便在我运行时进行身份验证:

$ stoken tokencode

我的密码由 4 位 PIN 组成,例如 WXYZ,它与用于密码输入的 RSA token 连接在一起。

我想出了以下单行 bash 命令来连接,到目前为止,该命令在我的 OSX 上有效:

'(echo "user.name";echo "WXYZ$(stoken tokencode)"; echo y )> vps.ad ; /opt/cisco/anyconnect/bin/vpn -s connect "vpn.domain" < vps.ad'

现在,在我的 python 脚本中,我尝试使用 ossubprocess 模块来执行相同的操作,但失败了。

我有几个 VPN 域和两个不同的引脚(例如 WXYZ),我试图将它们放在一起来复制上述 bash 命令。该函数现在如下所示:

def __auth_cisco_vpn__(username, pin, domain):
try:
token = str(os.popen('stoken tokencode', 'r'))

pre_prcs = '(echo "' + username + '";echo "' + pin + '$(stoken tokencode)"; ' + 'echo y )> vps.ad ; /opt/cisco/anyconnect/bin/vpn -s connect "' + domain + '" < vps.ad'

subprocess.Popen(pre_prcs, shell=True, executable="/bin/bash", stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate()
return True

except KeyboardInterrupt:
return False

当我尝试单独获取 token 时,出现以下错误,如下所示:

pre_prcs = '(echo "'+username+'";echo "'+pin+'$'+token+'"; ' + 'echo y )> vps.ad ; /opt/cisco/anyconnect/bin/vpn -s connect "'+domain+'" < vps.ad'

subprocess.Popen(pre_prcs, shell=True, executable="/bin/bash", stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()

类型错误:无法连接“str”和“file”对象

我该怎么办?非常感谢。

最佳答案

经过一番调整,我发现了问题并提出了以下解决方案。请注意下面 # Assign cmd 部分中的引号错误:

import subprocess

def __auth_cisco_vpn__(username, pin, domain):

# Grab Token
proc = subprocess.Popen(['stoken', 'tokencode'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
store = list(proc.stdout)
token = store[0].strip()

# Assign cmd
credentials = "printf '" + username + "\\n" + pin + token + "\\ny'"
vpn_cmd = "/opt/cisco/anyconnect/bin/vpn -s connect '" + domain + "'"
cmd = credentials + " | " + vpn_cmd

# Command Execution
print("Executing Command: \n" + cmd)
subprocess.Popen(cmd,
shell=True,
executable="/bin/bash",
stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate()

__auth_cisco_vpn__('user.name', 'WXYZ', 'domain')

关于python - 通过 Python 连接 CISCO Anyconnect VPN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42705256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com