问题描述
最近使用xshell用ssh登录远程服务器,使用指令时,发现命令无法找到,但是在服务器本身登录时是可以找到的,使用vscode远程登录也可以找到命令。
问题分析
参考博客ssh连接远程主机执行脚本的环境变量问题
发现问题定位为ssh登录时为non-interactive + non-login shell,这种方式会去加载加载$BASH_ENV的值所对应的文件
echo $BASH_ENV
发现此值为空
文中给出了两种方案:
-
第一种,在/etc/profile或者~/.bashrc文件开头,加入下面代码,来强制login shell
#!/bin/bash --login
经过测试,发现在/etc/profile无效,在~/.bashrc有效,加入后需要source一下文件
-
第二种,设置$BASH_ENV值,通过在/etc/profile进行设置,经过测试,可以设置成功,但是对我的电能命令依旧无效
解决方法
按照下面方法,可以解决ssh找不到命令
1,在~/.bashrc头部加入
#!/bin/bash --login
加入后,终端执行
source ~/.bashrc
使文件生效,查看所用的命令是否可以找到,如果可以找到,执行下一步
2.在/etc/profile末尾加入
source ~/.bashrc
使得下次ssh登录有效