【发布时间】:2015-02-09 16:17:00
【问题描述】:
大家早上好!当系统通过用户主目录中的 .profile 文件启动时,我有一个 bash 脚本自动启动:
sudo menu.sh
脚本按预期启动,然而,当在脚本中调用 ssh UN@ADDRESS 之类的东西时,known_hosts 文件被放置在 /root/.ssh 目录中,而不是调用脚本的用户帐户!我尝试修改 .profile 以调用“sudo -E menu.sh”和“sudo -H menu.sh”,但两者都未能在调用脚本的用户主目录中创建 known_hosts 文件。我的 /etc/sudoers 如下:
# Declarations
Defaults env_keep += "HOME USER"
# User privilege specification
root ALL=(ALL) ALL
user ALL=NOPASSWD: ALL
任何帮助将不胜感激!
谢谢 戴夫
更新:所以我做的一个工作是通过脚本并在特定调用之前添加“sudo -u $USER”(因为 sudo 应该保留 $USER env var)。对我来说,这似乎是解决这个问题的一种非常糟糕的方法。 sudo 应该在启动 menu.sh 时保留 USER 和 HOME 目录变量,为什么我需要以特定用户的身份再次显式调用 sudo 以保留该信息(即使 sudo 被告知要通过/etc/sudoers 文件)。没有线索,但想为遇到它的任何人更新这篇文章,直到找到更好的解决方案。
【问题讨论】:
-
抱歉,用户主目录中的 .profile 脚本通常不在系统启动时执行。它仅在该用户登录系统时执行(如果有的话)。
-
感谢您的快速评论 arkascha。该脚本正在按设计加载,因此 .profile 脚本没有任何问题。还有其他想法吗?
-
我并不是说脚本没有被执行。我只是想指出这个问题是不精确的。关于这个问题:在根主目录中肯定会生成一个 known_hosts 文件,因为它是生成另一个进程的根用户(这里是 ssh 客户端)。那么你为什么声称 sudo 不能正常工作呢?它完全按预期工作。
-
问题不在于 .profile,而在于 ssh 和 sudo。我将其包括在内是为了提供尽可能多的信息,因为该调用可能需要调整。
-
当 sudo 被告知要保留调用者的主目录时,为什么会在根的主目录中生成文件?