SSH远程机器并执行命令
SSH remote machine and execute command
我正在通过 sshing 连接到远程机器并执行命令,但我在远程机器上的 $PATH 设置为原始机器中用户的 $PATH 而不是 sshed 机器的 $PATH。但是如果我 ssh 到远程机器并执行 echo $PATH,它被正确设置为新机器中的登录用户
root@host1> ssh admin@remotemachine echo $PATH
这会打印用户的 PATH,在本例中是 host1 上的 root 而不是 remotemachine 上的 admin
root@host1> ssh admin@remotemachine
admin@remotemachine's password: ****
echo $PATH
以上工作正常
基本上它不会将环境更改为远程计算机上的新用户。不知何故,即使我登录到远程机器,它也保留了 host1 的 root 环境。如果我执行 ls -al /,它会显示远程机器的目录,这意味着我已登录到远程机器
让我们使用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
正在 运行 使用未扩展命令而不是扩展命令,我们在 [=33= 中得到远程 PATH
].
使用-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
在执行前不会展开。
我正在通过 sshing 连接到远程机器并执行命令,但我在远程机器上的 $PATH 设置为原始机器中用户的 $PATH 而不是 sshed 机器的 $PATH。但是如果我 ssh 到远程机器并执行 echo $PATH,它被正确设置为新机器中的登录用户
root@host1> ssh admin@remotemachine echo $PATH
这会打印用户的 PATH,在本例中是 host1 上的 root 而不是 remotemachine 上的 admin
root@host1> ssh admin@remotemachine
admin@remotemachine's password: ****
echo $PATH
以上工作正常
基本上它不会将环境更改为远程计算机上的新用户。不知何故,即使我登录到远程机器,它也保留了 host1 的 root 环境。如果我执行 ls -al /,它会显示远程机器的目录,这意味着我已登录到远程机器
让我们使用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
正在 运行 使用未扩展命令而不是扩展命令,我们在 [=33= 中得到远程 PATH
].
使用-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
在执行前不会展开。