0

2 つのエージェントがプラットフォーム間で通信するのに問題があります。

内部ネットワークで実行されている 2 つの仮想マシンがあり、VM の 1 つには、他の VM 上のプラットフォームに接続して公開しようとするエージェントがあります。接続と送信のコードは、ForwarderAgent などの例と同じです。エージェントがお互いを認識して接続を試みることはわかっていますが、認証に失敗します。

接続しようとしているプラ​​ットフォームで、公開エージェントが提示している資格情報を確認できます。ただし、提示された資格情報は、で生成された秘密鍵です。

$VOLTTRONHOME/keystores/

エージェントを起動するたびに。そのため、エージェントを起動するたびに資格情報が変更されます。

使用しようとする資格情報がわからない場合、事前にエージェントを既知の ID として追加する方法がわかりません。

異なるアドレスをknown_hostsとして追加し、エージェントのインストールに関連付けられた公開鍵を使用して、2つのプラットフォーム間でエージェントを登録しようとしました

volttron-ctl auth add

ただし、送信エージェントは引き続き新しい資格情報を提示します。エージェントが一貫した公開鍵を使用して発行するように、構成手順が不足していますか?

4

1 に答える 1

1

インストールされたエージェントから外部プラットフォームに接続するためのエージェントを作成する場合、その方法のガイドラインとして以下を使用する必要があります。

````

import gevent
from volttron.platform.vip.agent import Agent

destination_vip="tcp://127.0.0.5:22916?serverkey=dafn..&publickey=adf&secretkey=afafdf"


event = gevent.event.Event()
# Note by specifying the identity, the remote platform will use the same
# keystore to authenticate the agent.  Otherwise a guid is used which 
# changes keys each time.
agent = Agent(address=destination_vip, enable_store=False, identity="remote_identity")
gevent.spawn(agent.core.run)
if not event.wait(timeout=10):
    print("Unable to start agent!"

````

これはhttps://github.com/VOLTTRON/volttron/blob/master/services/core/ForwardHistorian/forwarder/agent.py#L317からのものであることに注意してください。ただし、destination_vip アドレスを指定する必要のない別のメカニズムがあります。開発中の公開鍵と秘密鍵が含まれています。

さらに、上記のコードで言及した公開鍵は auth.json ファイルにある必要があり、/または auth.json ファイルで /.*/ 経由のすべての接続を許可する必要があります。

これが役立つことを願っています!

于 2017-01-12T23:17:28.963 に答える