栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

关于ssh远程执行命令出现xxx: command not found问题

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于ssh远程执行命令出现xxx: command not found问题

最初是在虚拟机搭建Hadoop3.x集群,使用命令ssh hadoop001 jps,出现:

bash: jps: command not found

但是单独测试jps命令和先ssh登录再测试jps命令都是可行的。
这说明配置的 /etc/profile文件中的环境变量是有效的,
对ssh远程执行命令这种方式是无效的,profile文件没有调用到。
于是通过技术文章了解ssh远程执行命令的原理。
https://blog.csdn.net/whitehack/article/details/51705889


了解到ssh 远程执行命令采用bash的non-interactive + non-login shell模式。这种模式下,bash没有登录启动,然后创建一个shell,执行完脚本或命令就退出,不与用户交互。它不会调用/etc/profile文件,而是会去调用用户的home目录下的.bashrc文件,即~/.bashrc。从两个文件开头也可以看出:

于是解决思路就是在~/.bashrc文件中加入对应的环境变量:

export JAVA_HOME=/home/ubuntu/module/jdk
export PATH=$PATH:$JAVA_HOME/bin

然后我把环境变量添加在.bashrc文件最后,保存:

但是!!!ssh远程命令反馈依然是jps: command not found,我逐一检查,重复看文章,多次测试,无一成功,真是哭死。甚至想要使用ln软链接将jps链接到/usr/local/bin,但这种方式治标不治本。而多次探索中我无意中看到.bashrc文件开头:

意思是如果不是运行交互式,就不做任何事情,而ssh远程命令就是非交互式,会不会执行完这段就退出了呢?于是我又测试,在这段代码前后都加入输出代码:

结果如我所料:

最终得出解决方案:在~/.bashrc文件中# If not running interactively, don't do anything这段话前面加入环境变量。

再执行命令source ~/.bashrc激活文件

测试成功!!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/323861.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号