2017-08-14 206 views
0

我sshing到远程计算机并执行一个命令,但我的远程计算机上的$ PATH设置为用户在原始计算机中的$ PATH,而不是那个sshed计算机。但是,如果我ssh到远程计算机并执行回声$ PATH,它正确设置为登录用户在新机SSH远程机器和执行命令

[email protected]> ssh [email protected] echo $PATH 

这将打印用户的路径,在这种情况下,根在host1上不在remotemachine

[email protected]> ssh [email protected] 
[email protected]'s password: **** 
echo $PATH 

以上管理工作正常

基本上它不是改变环境到远程机器上的新用户。不知何故,即使我登录到远程计算机,它仍保留来自host1的root环境。如果我做LS -al /,它显示了远程机器上,这意味着我登录到远程机器的目录

回答

3

让我们用set -x调试我们实际运行:

$ set -x 
$ ssh localhost echo $PATH 
+ ssh localhost echo /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

线与+告诉我们,命令,我们实际上运行是:

ssh localhost echo /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

不出所料,这也是我们回来的价值,不管什么样的远程PATH是。

我们可以单引号的命令,以确保我们发送的echo $PATH代替echo /usr/local/bin:...到服务器:

$ ssh localhost 'echo $PATH' 
+ ssh localhost 'echo $PATH' 

现在set -x显示ssh正在与未展开命令,而不是扩展命令运行,我们作为回报获得远程PATH

+0

打印不同的$ PATH,但仍然不同于它打印的内容,如果我ssh到远程机器,然后在远程机器控制台上执行echo $ PATH。 – PMat

+1

这很可能是远程主机上的配置问题。你可以尝试用'ssh -tt你@ yourhost bash -ilc''echo \ $ PATH'''来伪造一个带有tty的交互式登录shell。 –

+0

是的,工作。 – PMat

0

使用-t

ssh [email protected] -t 'echo $PATH' 

从手册页:

-t  Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a 
     remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t 
     options force tty allocation, even if ssh has no local tty. 

的解释是有点神秘,但它会执行任何你加上引号。单引号很重要,因此$PATH在执行之前不会展开。

+0

不行不行 – PMat

+0

@PMat,你是什么意思的“不起作用”?当你运行这个命令时会发生什么?输出会有帮助。 – ryanpcmcquen