SSH远程机器和执行命令

时间:2017-08-14 23:00:26

标签: linux ssh su

我正在搜索远程计算机并执行命令,但远程计算机上的$ 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 /,它会显示远程计算机上的目录,这意味着我已登录到远程计算机

2 个答案:

答案 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在执行之前不会展开。