通过ssh在远程服务器上执行命令

38
我正在尝试通过本地服务器上的ssh命令在远程Linux服务器上执行命令,如下所示:
ssh myremoteserver 'type ttisql'
其中ttisql是远程机器路径上的一个可执行文件。
运行结果为:
bash: line 0: type: ttisql: not found
当我首先连接然后执行以下命令时:
ssh myremoteserver 并输入以下命令:
[myuser@myremoteserver~]$: type ttisql
我得到了预期的ttisql exe路径。
奇怪的是,在我的beta环境中执行第一个命令时,它按预期工作并返回exe的路径。 在beta场景中,机器A连接到远程机器B,但两台机器都在现场,并且ssh命令快速连接到远程机器。
问题出现在我们的生产环境中,当机器A在本地,机器B在外部,并且ssh命令需要一秒钟或两秒钟才能连接时。
我唯一看到的区别是production ssh连接所需的时间。 远程系统上的路径正确,因为在初始连接后输入命令可以正常工作。
有人可以帮助我理解为什么这个简单的命令会在一个环境中工作而在另一个环境中不起作用吗? 问题是否可能与通过ssh连接所需的时间有关?
2个回答

26

当您使用ssh运行命令时,在 shell 交互(= 当您登录到服务器时)和非交互状态下,您的PATH设置方式是不同的。

请查看您的 shell 使用的 rc 文件,例如.bashrc.bash_profile.profile(取决于您的系统)。如果您在正确的位置设置了PATH,那么当您通过ssh运行ttisql时,它可以正常工作。

另一个解决方案是使用ttisql的绝对路径,这样它就不会依赖于您的PATH设置。


1
更新了 .bashrc 和 .bash_profile 文件就解决了问题。谢谢! - jlteksolutions
谢谢你的回答。对我来说,另一个障碍是 ssh remote echo $PATHssh remote 'echo $PATH' 之间的区别。那些反引号起了关键作用。 - fenkerbb
1
很酷,@fenkerbb!顺便说一下,在你的例子中,它们的通用名称是单引号;-) - janos

26

在非交互式会话(ssh command)和交互式会话(ssh,然后是command)中,环境可能不同。在两种情况下都尝试使用echo $PATH

ssh myremoteserver 'echo $PATH'

vs

ssh myremoteserver
[myuser@myremoteserver~]$: echo $PATH

如果它们不同,请查看所有启动脚本,寻找基于$PS1$-的某些差异化行为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接