首页 > 解决方案 > 在远程主机上的命名空间内运行守护程序。(机器人框架)

问题描述

我在 Robot Framework 中写了一个关键字,它应该连接到某个远程主机并在这个远程主机上呈现的网络命名空间内启动一个守护进程/服务器(例如 SSH 守护进程)。我正在使用 SSHLibrary 建立与远程主机的连接,并执行一个应该启动给定守护程序的命令。关键字的示例如下。

Start daemon
     ${cmd}=     Set Variable    ip netns exec NAMESPACE CMD_TO_START_DAEMON
     Open connection  REMOTE_HOST
     Login  USERNAME  PASSWORD
     ${output}=  Execute Command     ${cmd}  return_rc=True  sudo=True  sudo_password=SUDO_PSWD
     Should Be Equal As Integers  ${output}[1]  0 

问题是,有了这个实现,什么都不会启动。该关键字也不会报告任何错误。输出如下所示:

${output} = [sudo] password for USERNAME:

sudo 密码正确。如果我直接在远程主机上的终端中执行相同的命令,它会完美运行。如果我尝试使用“执行命令”关键字启动守护程序,而不是在名称空间中,而是在远程主机本身上,它也可以工作。该关键字也做得很好,如果我只想在命名空间中执行一个命令,但是我尝试启动一个守护程序,我总是遇到这个问题。同样的问题,如果我使用“启动命令”关键字而不是“执行命令”。

远程主机是 Ubuntu Server(18.04.3)

也许有人对这种行为有解释?或者关于我如何以其他方式做同样的事情的任何建议?

感谢您的时间!

标签: robotframework

解决方案


  1. 如果可以以 root 身份登录,请添加您的公钥并使用关键字登录Login With Public Key

  2. 如果您无法以 root 用户身份连接到服务器,请尝试使用交互式 shell

像这样

Write  sudo su
Write  valid_sudo_password
Write  ${cmd}

推荐阅读