我无法让两个代理跨平台进行通信。
我有两个虚拟机在内部网络上运行,其中一个虚拟机有一个代理尝试连接并发布到另一个虚拟机上的平台。连接和发送的代码与ForwarderAgent等示例中的代码相同。我知道代理可以看到对方,并尝试连接,但身份验证失败。
在我尝试连接的平台上,我可以看到发布代理提供的凭据。但是,提供的凭据是在
中生成的私钥$VOLTTRONHOME/keystores/
每次我启动代理商。因此,每次启动代理时凭据都会更改。
如果我不知道它将尝试使用的凭据,我不确定如何预先将代理添加为已知身份。
我已将不同的地址添加为known_hosts,并尝试使用与其代理程序安装关联的公钥在两个平台之间注册代理
volttron-ctl auth add
但发送代理仍然提供新凭据。是否存在我缺少的配置步骤,以便代理将使用其一致的公钥进行发布?
答案 0 :(得分: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地址包含在开发中的公钥和密钥中。
此外,您在上面的代码中提到的publickey确实需要在auth.json文件中和/或您需要在auth.json文件中通过/.*/允许所有连接。
我希望这有帮助!