【问题标题】:Running sudo scripts/bash commands on a remote在遥控器上运行 sudo 脚本/bash 命令
【发布时间】:2018-05-07 13:25:06
【问题描述】:

我需要远程启动执行 sudo 任务的 bash 脚本,例如 chmod 和 ntpdate 以及回显到 gpio。

cron 作业可能是解决其中一些问题的最佳解决方案,但 cron 让我很头疼。如果可以的话,我想通过这个场地......

我已经确认我的脚本可以在本地运行(我可以通过 ssh 进入机器并运行它们而不会出现问题。)

但是,如果我尝试像这样远程运行它们:(这是在 C++ 系统调用中)

ssh user@pc 'bash -s' /user/myScript.sh

带有 sudo 的命令失败。

sudo chmod 失败:不存在 tty 且未指定 askpass 程序 回显到 gpio 失败:写入错误:设备或资源忙 sudo ntpdate 失败:不存在 tty 且未指定 askpass 程序

谁能帮忙解释一下,或者帮我确定这里发生了什么?

我愿意接受创可贴和不同的方法,谢谢!

【问题讨论】:

  • 如果myScript.sh 尝试从 其 标准输入读取任何内容,您的尝试也会失败,因为该文件是它自己的标准输入。您最好弄清楚 cron 的问题所在并加以解决,而不是使用 ssh 添加一层间接层。
  • 我在一个无法接收 cron 'mail' 的隔离环境中工作。你对我有什么建议吗,与 cron 故障排除有关吗?谢谢!
  • 不,但有人可能;在完全放弃cron之前先问那个问题。

标签: linux bash ssh sudo


【解决方案1】:

你自己已经发现了问题:

sudo chmod 失败:不存在 tty 且未指定 askpass 程序

如果你通过 ssh 运行你的 shell 脚本并且脚本想要运行命令sudo,sudo 本身会询问用户密码。但是 ssh 会话不是 tty! sudo 现在应该如何提示输入密码以及如何获取密码?

如果您在脚本中提供密码,您就可以做到(如果其他人可以阅读该脚本,这是非常危险的!)

script.sh:

echo "你的密码" |须藤 -S

作为替代解决方案,您可以使用更高权限的用户运行 ssh 会话。

ssh privileged_user@pc 'bash -s' /user/myScript.sh

所有这些都伴随着一些危险。使用特权更高的用户从脚本运行所有命令也很危险!

【讨论】:

  • 好的,这可能意味着我的 ssh 密钥没有进行身份验证......或者密钥需要一个 tty ?我已经在机器之间交换了 ssh 密钥以试图保持事情相对安全,但是回显用户名和密码对于故障排除非常有帮助。谢谢!
  • 基本上,我的用户 ssh 密钥不是“粘着”。我可以添加密钥,但我仍然需要登录。对于不同的用户,我没有任何问题。
  • 我在回显我的密码时遇到了麻烦,希望我可以在 ssh privileged_user@pc 'bash -s' /user/myScript.sh 某处添加一个标志
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 2013-07-11
  • 2011-03-11
  • 1970-01-01
  • 2013-12-25
  • 2015-09-03
  • 2021-10-20
  • 1970-01-01
相关资源
最近更新 更多