ssh与sudo无法正常工作

时间:2015-02-09 16:17:00

标签: linux bash shell ssh sudo

大家早上好!当系统通过用户主目录中的.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文件)。毫无头绪,但想要为遇到它的任何人更新这篇文章,直到找到更好的解决方案。

1 个答案:

答案 0 :(得分:0)

关于OpenSSH,known_hosts的默认位置是~/.ssh/known_hosts。在扩展"〜"时,Ssh不会兑现$ HOME。在文件名中。它查找用户的实际主目录并使用它。当您以root用户身份运行ssh时,无论您将HOME设置为何,它都将解释相对于root用户主目录的路径名。

您可以尝试将ssh参数UserKnownHostsFile设置为您要使用的文件的名称:

ssh -o UserKnownHostsFile=$HOME/.ssh/known_hosts user@host...

但是,你应该测试一下。 Ssh可能会抱怨使用属于另一个用户的文件,如果必须更新该文件,那么该文件可能最终归root所有。

实际上,您最好以您希望ssh使用.ssh文件夹的用户身份运行ssh。通过sudo运行流程会产生风险,用户可以找到一种方法来执行您不希望他们执行的操作。您应该尽可能少地使用提升的权限来限制风险。