0

我无法让两个代理跨平台通信。

我有两台虚拟机在内部网络上运行,其中一台虚拟机有一个代理,它尝试连接并发布到另一台虚拟机上的平台。连接和发送的代码与 ForwarderAgent 等示例中的代码相同。我知道代理可以看到对方,并尝试连接,但身份验证失败。

在我尝试连接的平台上,我可以看到发布代理提供的凭据。但是,提供的凭据是在

$VOLTTRONHOME/keystores/

每次我启动代理。因此,每次我启动代理时凭据都会更改。

如果我不知道它将尝试使用的凭据,我不确定如何事先将代理添加为已知身份。

我已将不同的地址添加为 known_hosts,并尝试使用与其代理安装关联的公钥在两个平台之间注册代理

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 回答