我有一个脚本可以执行各种操作,其中,它提示用户输入密码,将其存储在参数中$password
并执行以下命令:
ssh [host] 'cd someDir; echo "$password" | sudo -u nobody -S <command>'
问题是我收到错误Sorry, try again
,然后连接被终止。
如何使用 ssh 执行 sudo 命令?如果我首先连接到远程主机然后运行它就可以了echo 'password_string' | sudo -u nobody -S <command>
答案1
您应该尝试调试/故障排除。将当前的 ssh 命令更改为
SSH主持人'光盘一些目录; echo "密码是$password"'
你会得到
密码是现在尝试
回声 主持人'光盘一些目录; echo "密码是$password"'你会得到
主持人光盘一些目录; echo "密码是$password"
在您的 ssh 命令中,您被$password
双引号包围,并且周围被单引号包围。嗯,这会将双引号转换为简单的普通字符 - 与键入LDQ
and相比,语法上并不重要RDQ
- 因此$password
有效地用单引号括起来。所以$password
被发送到远程主机,而不是价值($password
即实际密码)。然后,远程主机上的 shell 尝试扩展$password
为一个值,但它什么也得不到,因为该变量尚未在该 shell 中设置。
可能有效的命令是
SSH主持人'光盘一些目录;回声“'”$密码“'”| sudo -u 无人 -S命令'
让我们检查一下,添加空格以便说明/清晰:
... '...;回声“'“$密码”'”|须藤……”
单引号内仍然有双引号。但是,在指定文字双引号(after echo
)之后,它打破单引号,因此变量扩展/替换可以发生在本地命令上。然后我们$password
用双引号括起来。然后我们返回到第二个双引号、竖线 ( |
) 和sudo
命令的单引号。
警告:我目前无法访问可以 ssh 访问的主机,因此我还没有对此进行完全测试。