sshpass 命令踩坑记录--未获取环境变量

简介: sshpass 命令踩坑记录--未获取环境变量

sshpass 命令踩坑记录–未获取环境变量

近日,由于某个厂商的安全流量分析的探针导致了java进程假死,在使用jstack命令却报虚拟机版本不匹配的问题。几番查询,发现未使用该用户配置在.bash_profile下的java环境变量。而是操作系统预装的openJdk

不执行用户目录下.bash_profile

因此,通过root用户 yum 删除了openJdk。然引起了gitee企业版流水线执行主机部署阶段报出异常 java命令找不到。

不执行/etc/profile

接着,通过root用户在/etc/profile中配置了java环境变量。然流水线仍然报错,java命令找不到。

对比预装openJdk

通过 whereis java命令,对比了其他还保留预装openJdk的机器,发现java命令的位置在/usr/bin/下。

建立软链接

通过 **ln -s 被链接的源文件 链接文件**的方式将java命令链接为/usr/bin/java。之后流水线就正常运行了。

三者对比

通过个人电脑,对三种情况(root/个人用户/sshpass)进行了比较,得到如下结果:

wanglh@dark:~$ su - root
请输入密码:
验证成功
root@dark:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
root@dark:~# exit
注销
wanglh@dark:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin:/snap/bin
wanglh@dark:~$ sshpass -p 密码 ssh -o 'StrictHostKeyChecking=no' wanglh@127.0.0.1 'echo $PATH'
/usr/local/bin:/usr/bin:/bin:/usr/games

环境变量果然是sshpass得到的最少。

登录方式的不同

linux 登录分 交互式登录、非交互式登录。我们正常登录终端是交互式登录,使用脚本去执行就是非交互式登录。

例如我们在切换用户时使用的su - username、su username即是不同的方式,带着“-”符号的为交互式的方式登录,会清空当前的环境变量,并去执行初始化脚本。而后者则是继承当前的环境变量。

总结

java命令会受到环境变量的影响,使用了其他版本的jdk。最好,环境中只存在一个java环境。

另外,该厂商给出意见,对于流水线中的脚本,可以指明java命令的绝对路径,防止此类问题。

目录
相关文章
pip镜像源大全及配置
在中国使用pip时,可以配置国内镜像源来提高安装速度和稳定性。以下是一些常见的国内镜像源:
13263 0
使用sshpass工具通过SSH执行远程命令
`sshpass`是一个用于在脚本中自动输入SSH密码的工具 **在Debian/Ubuntu上安装sshpass:** ```bash sudo apt-get install sshpass ``` **在CentOS/RHEL上安装sshpass:** ```bash sudo yum install sshpass ``` **在Fedora上安装sshpass:** ```bash sudo dnf install sshpass ``` 安装完成后,你可以使用`sshpass`命令通过SSH执行远程命令。以下是一个示例: ```bash sshpass -p 'yo
928 0
Net Core 跨平台应用使用串口、串口道通信,可能出现的问题、更简洁的实现方法
Net Core 跨平台应用使用串口、串口道通信,可能出现的问题、更简洁的实现方法
490 0
Net Core 跨平台应用使用串口、串口道通信,可能出现的问题、更简洁的实现方法
Debian 官方源换为国内的源的操作方法
apt-get update 报错,采用更换源的方式解决问题。
53392 0
在 Linux 中通过 SSH 执行远程命令时,无法自动加载环境变量(已解决)
SSH远程执行命令时遇到“命令未找到”问题,原因是Linux登录方式不同导致环境变量加载差异。解决方案:将环境变量写入`/etc/profile.d/`下的文件,或手动在命令前加载环境变量,如`source /etc/profile`。
1014 0
|
12月前
|
查看服务器的配置,系统,cpu等信息
查看服务器的配置,系统,cpu等信息
2206 8
基于和声搜索算法(Harmony Search,HS)的机器设备工作最优调度方案求解matlab仿真
通过和声搜索算法(HS)实现多机器并行工作调度,以最小化任务完成时间。在MATLAB2022a环境下,不仅输出了工作调度甘特图,还展示了算法适应度值的收敛曲线。HS算法模拟音乐家即兴创作过程,随机生成初始解(和声库),并通过选择、微调生成新解,不断迭代直至获得最优调度方案。参数包括和声库大小、记忆考虑率、音调微调率及带宽。编码策略将任务与设备分配映射为和声,目标是最小化完成时间,同时确保满足各种约束条件。
|
10月前
|
centos使用阿里的yum源
centos使用阿里的yum源
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等