在sudo命令不需要密码的ssh会话中,如何使用RobotFramework进行sudo?

问题描述

我试图自动执行一个程序,在该程序中我使用用户名和密码登录ssh会话,然后需要执行sudo su-“ username”(没有密码)。我可以顺利登录ssh会话,但无法使sudo命令正常工作。查看Robot文档,如果没有密码,您应该不能输入任何密码,但这似乎会使程序挂起,就好像它在等待密码一样。我尝试使用的命令是这个。

Execute Command    su - "username"    sudo=True    sudo_password=None

我不确定这是Robot Framework的错误还是仅要求该密码才能正常工作。我确实使用C编写了一个交互式ssh,有人可以手动输入sudo su命令,然后自动化将继续。如果有人对机器人命令有任何建议,或者对使用paramiko如何执行此命令有任何建议,那么我可以导入该库。我曾想过的其他想法是,如果我可以让C程序与robotframework一起工作,那么我可以使用它。谢谢您的任何建议。

解决方法

我认为这不是Robot Framework中的错误。这就是Linux中的Shell的工作方式,它与sudo_password=None没有任何关系。
我距离解释这些东西的专家还很远。
但是,Robot Framework SSHLibrary使用paramiko exec_command来执行命令。
并且如文档中所述,Execute Command将始终在新的外壳中执行,然后关闭。
SSHLibrary Doc - Execute Command

让我们尝试在命令行中手动运行它。
ssh <login_user>@<server_ip> sudo su - <the_su_username>
该命令不会给出任何响应,并且会挂起,就像在Robot Framework和Paramiko中一样。

如果我们改为执行将给出响应的命令,它将起作用。
ssh <login_user>@<server_ip> sudo ls -ltr
如果您尝试这样做,也可以在机器人框架中使用。
Execute Command ls -ltr sudo=True sudo_password=None

正如您所说,如果您在C中使用交互式实现,它就会起作用。
我建议您也尝试在Robot Framework中使用交互式外壳来实现。
这将在同一shell中运行多个命令。

您可以在此处找到如何使用WriteRead的更多详细信息。