我们正在尝试利用 Azure 自动化,将 Hybrid Runbook Workers 作为我们正在开发的托管服务平台的边缘运行时,除了以下障碍外,事情进展顺利:
我们构建了一个基本的 Python 3.8 测试脚本,利用 pexpect 库(pxssh 无法正常工作,因此我们正在运行核心 pexpect 函数)连接到设备并通过 SSH 执行命令。在任何人建议之前,我们必须为我们的用例使用密码。这是连接/登录过程的相关片段:
session = pexpect.spawn(f'ssh {ip_address} '
f'-l {username} '
f'-o StrictHostKeyChecking=no')
print("Logging in")
session.expect("password:", 5)
print(session.before)
session.sendline(f"{password}\r")
session.sendline("\r")
session.expect(">$", 5)
print("Login successful")
我们已经验证了该脚本可以在远程开发环境以及混合工作器本身(在本地保存脚本并从终端运行)完美运行,但在尝试在 Azure 自动化中创建作业时,设备可以使用导入的 pexpect 模块运行脚本,但我们收到以下错误:
Pseudo-terminal will not be allocated because stdin is not a terminal.
添加-t -t
, -tt
, 或-T
作为参数将使错误消息消失,但无论如何,我们无法写入标准输出,因此在从 Azure 触发函数时,我们的测试脚本基本上是死水了。
我们猜测问题源于临时运行时环境的实例化方式,但尚不清楚这是否是平台的固有限制,或者我们是否在这里遗漏了一些东西。