我试图在本地服务器上通过ssh命令在远程linux服务器上执行命令,如下所示:
ssh myremoteserver'type ttisql'
其中ttisql是我的远程机器路径上的可执行文件。
运行它的结果是:
bash:第0行:输入:ttisql:not found
当我只是先连接并执行:
ssh myremoteserver
然后输入命令:
[myuser @ myremoteserver~] $:输入ttisql
我按照我的预期回到了ttisql exe的路径。
奇怪的是,当我在beta环境中执行第一个命令时,它按预期工作并返回exe的路径。在测试方案中,计算机A连接到远程计算机B,但两台计算机都在现场,ssh命令可以快速连接到远程计算机。
当我的生产环境中遇到问题,当机器A是本地的而机器B是非现场的,并且ssh命令需要一两秒才能连接。
我能看到的唯一区别是生产ssh连接所需的时间。远程系统上的路径是正确的,因为如果在初始连接后输入命令,则该命令有效。
任何人都可以帮助我理解为什么这个简单的命令在一个环境中工作而不在另一个环境中工作?问题可能与通过ssh连接所需的时间有关吗?
答案 0 :(得分:25)
在交互式会话(ssh command
,然后ssh
)的非交互式会话(command
)中,环境可能不同。在这两种情况下都请尝试echo $PATH
。
ssh myremoteserver 'echo $PATH'
VS
ssh myremoteserver
[myuser@myremoteserver~]$: echo $PATH
如果它们不同,请根据$PS1
或$-
答案 1 :(得分:22)
当您的shell处于交互状态时(=当您登录服务器时),以及非交互式(使用PATH
运行命令时),ssh
的设置方式不同。
查看shell使用的rc文件,例如.bashrc
,.bash_profile
,.profile
(取决于您的系统)。如果您将PATH
设置在正确的位置,那么当您通过ttisql
运行时,ssh
可以正常工作。
另一种解决方案是使用ttisql
的绝对路径,然后它将不依赖于您的PATH
设置。