无法通过ssh命令发送密码,密码错误错误

无法通过ssh命令发送密码,密码错误错误

我有一个脚本可以执行各种操作,其中,它提示用户输入密码,将其存储在参数中$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双引号包围,并且周围被单引号包围。嗯,这会将双引号转换为简单的普通字符 - 与键入LDQand相比,语法上并不重要RDQ- 因此$password有效地用单引号括起来。所以$password被发送到远程主机,而不是价值$password即实际密码)。然后,远程主机上的 shell 尝试扩展$password为一个值,但它什么也得不到,因为该变量尚未在该 shell 中设置。

可能有效的命令是

SSH主持人'光盘一些目录;回声“'”$密码“'”| sudo -u 无人 -S命令'

让我们检查一下,添加空格以便说明/清晰:

            ... '...;回声“'“$密码”'”|须藤……”

单引号内仍然有双引号。但是,在指定文字双引号(after echo)之后,它打破单引号,因此变量扩展/替换可以发生在本地命令上。然后我们$password用双引号括起来。然后我们返回到第二个双引号、竖线 ( |) 和sudo命令的单引号。

警告:我目前无法访问可以 ssh 访问的主机,因此我还没有对此进行完全测试。

相关内容