【问题标题】:SSH sudo inside script different behaviour脚本内的 SSH sudo 不同的行为
【发布时间】:2021-04-07 07:01:42
【问题描述】:

我正在尝试在本地网络中设置一些自动化,并开始使用一些 shell 脚本和我看到的东西 - 根据脚本的运行方式(使用或不使用 sudo),脚本内的 SSH 非常奇怪的行为:

我有什么: 计算机 A 和计算机 B。

ComputerA:

一个shell脚本script.sh:

cp /dir1/file1 /dir2/file2
ssh username@ComputerB "sudo reboot"

/etc/ssh/ssh_config 文件有一些配置可以在没有 ssh-keys 的情况下工作(它们总是在 ComputerB 上更改):

StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
GlobalKnownHostsFile=/dev/null

ComputerB:

/etc/sudoers 文件中:

username ALL=(ALL:ALL) NOPASSWD:ALL

当我通过 SSH 连接到 ComputerA 并在没有 sudo 的情况下运行 script.sh 时,我收到写入 /dir2 的权限错误(没关系),并且 ComputerB 上的下一个命令正常执行(重新启动 ComputerB),但我正在运行 sudo script.sh。它复制文件然后我很奇怪 - SSH 询问我用户名密码。尝试了不同的变体将 ssh 命令更改为:

ssh -t username@ComputerB "echo user_pass | sudo -S reboot"

但没有任何帮助。 所以我需要帮助来弄清楚会发生什么以及在不输入 ssh 命令密码的情况下执行sudo script.sh 该怎么做。 谢谢!

【问题讨论】:

  • 您可能需要编辑文件权限。可以到带有 script.sh 的目录并运行ls -l 并告诉我结果吗?
  • @mjlitz script.sh 拥有“777”权限

标签: shell ssh sudo


【解决方案1】:

不要在计算机 A 上运行 script.shsudo;而是像这样修改脚本:

sudo cp /dir1/file1 /dir2/file2
ssh username@ComputerB "sudo reboot"

您看到 奇怪的行为 的原因是您实际上是 computerA 上的 root(我假设您为您的常规设置了密钥对)用户并期望无密码连接到 computerB?),并且 computerA 上的 root 没有 computerB 的密钥对em> 知道。

【讨论】:

  • 是的,这是有道理的,sudo cp 将完成这项工作,出于某种原因,我不想让sudo cp。我不明白为什么在这两种情况下我使用相同的username 通过 SSH 连接所以我希望我运行 script.sh 的方式没有区别 - 有或没有 sudo。
  • @Doe - 是的,有。使用 sudo 时,它会尝试使用来自 computerAroot 的密钥对,而不是你的。 用户名只与远端相关,对按键的选择没有影响。如果您不想在脚本中使用sudo,请确保您的普通帐户具有对dir1 dir2 的读/写访问权限。
猜你喜欢
  • 2015-07-20
  • 2022-08-09
  • 1970-01-01
  • 2018-10-30
  • 2015-06-27
  • 1970-01-01
  • 2023-03-26
  • 2021-06-13
  • 1970-01-01
相关资源
最近更新 更多