我正在搜索远程计算机并执行命令,但远程计算机上的$ PATH设置为原始计算机中的$ PATH用户而不是sshed计算机的用户。但是,如果我ssh到远程计算机并执行echo $ PATH,它将正确设置为新计算机中的登录用户
root@host1> ssh admin@remotemachine echo $PATH
这会打印用户的PATH,在这种情况下是root1 on host1而不是admin on remotemachine
root@host1> ssh admin@remotemachine
admin@remotemachine's password: ****
echo $PATH
以上工作正常
基本上,它不会将环境更改为远程计算机上的新用户。不知怎的,即使我登录到远程机器,它仍然保留了host1的root环境。如果我执行ls -al /,它会显示远程计算机上的目录,这意味着我已登录到远程计算机
答案 0 :(得分: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
作为回报。
答案 1 :(得分:0)
使用-t
:
ssh admin@remotemachine -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
在执行之前不会展开。