【问题标题】:mkdir: missing operand when doing sudo over sshmkdir:在 ssh 上执行 sudo 时缺少操作数
【发布时间】:2017-03-10 11:56:38
【问题描述】:

我正在尝试通过 SSH 创建具有 sudo 用户权限的目录。

这是我形成的命令

some_command "ssh -t userA@host bash -c \"\'sudo -u userB bash -c \" mkdir -p /home/userB/dir_to_create \" \'\" "

这里some_command 是expect 脚本的一部分。

我收到此错误:-

[sudo] password for userB:
mkdir: missing operand
Try `mkdir --help' for more information.
Connection to host closed.

如果我跑 sudo -u userB bash -c "mkdir /home/userB/dir_to_create"

它有效。

【问题讨论】:

  • 您是否需要使用所有这些bash -c 构造?如果 sudo 配置为允许 bash 并且不允许任意命令,则您不需要 ssh 并且仅需要 sudo 才需要它,这并不常见。
  • ssh userA@host 'sudo -u userB mkdir /home/userB/dir_to_create' 有什么问题?
  • @MarkPlotnick 谢谢。有效。我尝试了你的方式,并像魅力一样工作。你能把那个写成答案,这样我就可以接受了。再次感谢。这就是我所做的:- spawn bash -c "ssh -t userA@host \"sudo -u userB bash -c 'mkdir -p /home/userB/perf_tools' \" "

标签: bash ssh mkdir


【解决方案1】:
ssh -t user@host "bash -c \"sudo -u otherUser bash -c 'mkdir -p /home/userB/dir_to_create'\""

应该有效

【讨论】:

  • 你能检查我编辑的问题吗?我想把整个东西包装在另一个命令中。
【解决方案2】:

根据Mark Plotnick 的评论,我找到了答案。

这里有解决办法

spawn bash -c "ssh -t userA@host \"sudo -u userB bash -c 'mkdir -p /home/userB/perf_tools' \" "

诀窍在于,单引号和双引号的放置让所有的魔法都在这个脚本中发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 2017-06-16
    • 1970-01-01
    • 2017-06-10
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多