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文件)。毫无头绪,但想要为遇到它的任何人更新这篇文章,直到找到更好的解决方案。
答案 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
运行流程会产生风险,用户可以找到一种方法来执行您不希望他们执行的操作。您应该尽可能少地使用提升的权限来限制风险。