【问题标题】:Why does following command work in the bash but not from script为什么以下命令在 bash 中有效,但在脚本中无效
【发布时间】:2017-10-20 15:39:47
【问题描述】:

我遇到了这个非常奇怪的问题,我只是不明白为什么会这样。当我从我的 shell 手动执行以下命令时,它可以工作。

sudo -u some-user echo "$SSH_KEY" | /home/some-user/.ssh/authorized_keys

但是在 bash 脚本中它失败并显示我们没有任何权限的消息。

#!/bin/bash
sudo -u some-user echo "$SSH_KEY" | /home/some-user/.ssh/authorized_keys

是否有任何 bash 选项可以配置,或者有人可以解释这种行为吗? 对于非交互式终端或类似的东西,它看起来有点像 bash 安全性的东西,但我失去了我的创造力,让谷歌找到了解决方案。

我正在运行 Ubuntu 16.04。

【问题讨论】:

  • 从 bash 脚本运行时消息的确切文本是什么?你如何运行 bash 脚本?也许最重要的是,为什么some-user 有一个可执行程序作为他们的授权密钥文件?
  • 您必须将命令错误地复制到问题中。也许你在复制到脚本时也犯了同样的错误。
  • authorized_keys 是一个数据文件,而不是你可以运行的命令,不管有没有sudo
  • 确实忘记输入'echo "sshkey" | ' 在 authorized_key 文件前面。我想在周末前做的最后一件快事????
  • 也就是说,您的sudo 仅适用于echo。由于echo 不需要any 权限即可运行,所以它完全没用。 sudo foo | bar 只升级foo,而不是bar;并且sudo foo >> bar 以升级权限运行foo,但使用这些升级权限将bar 作为文件打开:该文件在sudo 甚至启动之前由shell 打开.

标签: bash ubuntu ubuntu-16.04


【解决方案1】:

经过数小时的调查,由于脚本中没有出现密码提示,似乎没有执行 sudo 命令。

解决方案是在运行脚本之前先运行一个 sudo 命令,或者只是将整个脚本作为 sudo 运行,这样您就可以一次输入密码,而其他 sudo 命令在没有密码提示的情况下运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多