使用ssh vs使用java时$ PATH是不同的

时间:2017-12-11 22:18:02

标签: java linux ssh

当我进入服务器时,我可以看到PATH变量已根据需要设置,并且需要添加一些自定义文件夹。

当我尝试使用Java中的com.jcraft.jsch.JSch库连接到同一服务器时,PATH将设置为其他内容。 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

这似乎是开箱即用的值,并且不包含所需的自定义文件夹。除非我提供可执行文件的完整路径,否则当我通过Java连接时,我不需要工作的任何命令。我需要连接到不同的服务器,并且可能在不同的位置设置可执行文件,因此这不是一个选项。

我希望有人可以帮我弄清楚当我使用Java连接时./bashrc文件无法运行的原因。我应该手动运行吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

使用命令行SSH连接时,您的"默认命令"是您在远程计算机上为您的用户名设置的shell(可能是bash,您可以使用chsh更改),然后bash导入您的.bashrc文件。

使用JSch进行连接时,您打开的Channel类型将确定您的连接将执行的操作。根据我对JSch如何工作的理解,可能是JSch在打开SSH会话时没有打开bash

作为一般经验法则,如果SSH守护程序配置为允许,请尝试使用~/.ssh/environment设置PATH而不是.bashrc。这将始终在SSH运行任何命令(包括shell)之前导入,因此设置PATH时更可靠。

可以在this Unix StackExchange post中找到有关.bashrcPATH和SSH的更多信息,包括我的答案的一些替代方案。