開発中のマネージド サービス プラットフォームのエッジ ランタイムとして Hybrid Runbook Workers を使用して、Azure Automation を利用しようとしています。次の障害を除けば、ほぼ順調に進んでいます。
デバイスに接続し、SSH 経由でコマンドを実行するために、pexpect ライブラリ (pxssh が適切に動作していないため、コア pexpect 関数を実行しています) を利用して、基本的なテスト Python 3.8 スクリプトを作成しました。誰かが提案する前に、ユースケースにパスワードを使用する必要があります。接続/ログイン プロセスの関連するスニペットを次に示します。
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 Automation 内でジョブを作成しようとすると、.デバイスは pexpect モジュールをインポートしてスクリプトを実行できますが、次のエラーが発生します。
Pseudo-terminal will not be allocated because stdin is not a terminal.
-t -t
、-tt
、またはを引数として追加する-T
と、エラー メッセージは消えますが、何があっても stdout に書き込むことができないため、Azure から関数をトリガーするとき、テスト スクリプトは基本的に水の中で死んでいます。
問題は一時的なランタイム環境がインスタンス化される方法に起因すると推測していますが、これがプラットフォーム固有の制限なのか、それとも何かが欠けているのかは不明です.