如何将 Open VPN 进程置于 SSIS 任务控制流中

How to put Open VPN process in an SSIS task control flow

我正在学习如何使用 SSIS 创建自动计划任务。在安全策略发生变化之前,一切都进行得很顺利。之前,每当我想连接到数据库时,我只需在 SSIS 连接管理器中输入 IP 地址、用户名和密码。 现在我需要先打开OpenVPN,这仍然是一个手动过程。所以我真的很想把这个放到 SSIS 任务流中。

我在 Whosebug 和其他一些网站上进行了搜索。这是 Whosebug 中的 link。这个例子给出了我们可以使用 VBA 来设置 link 的想法。然而,该示例显示我们需要一个 VPN 连接名称和 VPN 用户名,但我实际上没有,也不知道在哪里可以找到。每次我只需右键单击一个 .ovpn 文件并选择在这个配置文件上启动 openvpn。此外,当我打开该 .ovpn 文件时,没有命令指示我的连接名称或用户名。这是我打开它时的样子(此文件中没有 -auth-user-pass 东西,我可以使用此文件而无需指定它):

client
dev tun
proto udp
remote a website here 1111
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3

ca ca.crt
cert office.crt
key office.key
askpass login.txt

是否可以找到我的连接名称和用户名?如果我不需要连接名和用户名,我还能写VBA建立一个自动连接过程吗?

我还注意到 SSIS 中有一个 execute process task。我是否可以利用它(因为据我所知,显然我使用 openvpn.exe 来执行 .ovpn 文件)?

如果我说错了什么,请纠正我,因为我是 VPN 和 SSIS 的新手。非常感谢能帮助我的人。

我对 OpenVPN 一无所知,但我 运行 不久前遇到了类似的问题,服务器坚持使用 PuTTY 作为唯一允许的连接方法的 SSH 隧道。

制定这些政策的人从未想过对 SSIS 的影响,尤其是无人值守处理。

我找到的解决方案是:

  1. 查找与 PuTTy 客户端(称为 plink)等效的命令行
  2. 有详细的文档在手,因为这真的很难。
  3. 启动 SSIS 程序包 plink.exe,传递各种参数(注意:不要使用执行进程任务,因为它会等待进程退出:在脚本任务中启动进程,然后获取plink.exe 的 ProcessID 的句柄)。
  4. 稍等片刻后,SSIS 中的另一个脚本任务连接到 plink 进程的 InputBuffer,"typing in" 一个密码。是的,不安全且笨重,但您可以加密存储 SSIS 项目参数(这显然需要 SSIS 2012 或更高版本)
    1. SSIS 包现在可以连接到服务器并处理数据,就好像它是没有愚蠢访问要求的普通服务器一样。
    2. 在包结束时,终止 plink.exe 进程。

另外请记住,在无人看管的情况下(例如,在作业中安排时),您的包将 运行 在 不同的 安全上下文中一个你在开发包的工作(取决于 SSIS 服务设置)。如果您对 OpenVPN 的访问依赖于 ActiveDirectory,您可能需要为 SSIS 服务的登录用户设置另一个 OpenVPN 帐户。

如果这听起来很可怕、噩梦般复杂且不稳定,那是因为它确实如此。实际上,TL;DR 版本是:告诉管理服务器的人,如果他们真的希望您使用 SSIS 访问它,他们应该制定一些更明智的访问策略。

在与我的 IT 同事合作后,我想我解决了这个问题。以上是我对这个问题的回答和看法,如有错误请指正。

我认为自动打开 VPN 是个案问题。在这种情况下,我仍在 SSIS 中使用 Execute Process Task。在任务编辑器里面,我们执行的不是openVPN.exe,应该是一个批处理文件。在批处理文件(.bat 文件)中,它包含使用 OpenVPN.exe

打开 .ovpn 文件的命令

下面的过程为您提供了更详细的信息。

命令行是我在批处理文件中使用的:

@echo off
CD /D "C:\Program Files\OpenVPN\config"
start openvpn client.ovpn
TIMEOUT /T 10
exit

在SSIS中执行进程任务

希望这有用