2011-05-05 50 views
10

我试图使用ssh保留sudo的环境

这里从不同的服务器执行脚本的命令我使用从服务器1到服务器2发起查询:

ssh -t [email protected] "cd /var/www/vhosts/xxxxx/subdomains/preprod/; sudo ./replace.sh"; 

但问题是,当我做sudo$home = /root而脚本是:/var/www/vhosts/xxxxx/subdomains/preprod/

我怎样才能告诉sudo保护环境?

我试过sudo -P -,sudo -H,没有任何运气。

+1

是否replace.sh使用来自其所执行的路径?否则,你可以做sudo /var/www/vhosts/xxxxx/subdomains/preprod/replace.sh。 – Tommy 2011-05-05 19:47:15

+0

谢谢你花时间回答这个问题,它就是这样工作的。 但我更感兴趣知道是否有一个参数,我们可以传递给sudo保持当前的路径,而不是将其设置回根... – Tarek 2011-05-05 20:05:01

回答

16

这就是我从手册页得到的。

sudo -E 

-E的-E(保护环境)选项将覆盖在sudoers中的env_reset 选项(5))。当匹配的 命令具有SETENV标记或在sudoers(5)中设置了 setenv选项时,仅有 可用。

+1

昨天也试过这个选项,它失败了:) – Tarek 2011-05-06 13:21:13

+1

显然是修改尽管-E(特别是在Ubuntu中,默认情况下发生这种情况)仍然可以发生PATH环境变量作为安全问题。请参阅http://stackoverflow.com/questions/257616/sudo-changes-path-why – rogerdpack 2013-11-13 16:49:18

+1

@Tarek使用-E可能受限于您的管理员,因为environemtn变量可能会造成伤害。虽然在这种情况下sudo应该回来,并明确声明:你不能使用-E。如果它只是默默地失败了,你将会遇到不同的问题。 – TorstenS 2017-08-16 10:18:01