Ubuntu 18.04.5 LTS特定用户SSH登录Shell环境异常的排查修复及指定登录Shell为Bash的无副作用方案
Ubuntu 18.04.5 LTS特定用户SSH登录Shell环境异常的排查修复及指定登录Shell为Bash的无副作用方案
我完全懂你遇到这些问题的糟心感——.bash_profile不生效、source命令找不到、Tab补全用不了,连提示符都变成了光秃秃的$,这确实是因为你的登录Shell没设置成Bash导致的。咱们一步步来解决,全程只针对你的账号修改,不会影响其他用户,也不用重启SSHD服务或者系统。
问题根源复盘
你已经通过echo $SHELL查到当前登录Shell是/bin/sh,在Ubuntu 18.04里,/bin/sh其实是轻量级Shell dash 的软链接。dash为了精简,不支持Bash的诸多特性:
- 不会自动读取Bash专属的配置文件
.bash_profile - 没有内置
source命令(只能用.代替) - 默认不启用Tab补全功能
- 提示符默认就是极简的
$,而非Bash那种带用户名、主机名的格式
无副作用的修复方案(仅修改你的账号)
1. 确认系统已安装Bash
Ubuntu默认自带Bash,先验证一下路径:
which bash
正常会输出/bin/bash,如果没输出才需要安装(不过大概率不需要)。
2. 永久修改你的登录Shell为Bash
使用chsh命令修改个人登录Shell,这个操作只修改你的用户配置,不会影响其他账号,也不需要重启任何服务:
chsh -s /bin/bash
执行后输入你的用户密码即可完成设置。
注意:这个修改是永久生效的,但当前SSH会话不会立刻切换,需要退出当前SSH连接,重新登录才能生效。
3. 验证修复效果
重新登录后,执行以下操作确认:
- 检查当前Shell:
echo $SHELL→ 应该输出/bin/bash - 观察提示符:会自动变成
[你的用户名@主机名 ~]$格式 - 测试Tab补全:输入部分命令或文件名按Tab键,应该能正常补全
- 激活
.bash_profile:如果文件存在,里面的配置会自动加载;如果不存在,可以自己创建并添加配置,比如:
重新登录后,这些配置就会生效了。touch ~/.bash_profile # 加载.bashrc的配置(Ubuntu默认Tab补全等功能在.bashrc里) echo 'source ~/.bashrc' >> ~/.bash_profile # 自定义提示符(也可以保留Bash默认格式) echo 'PS1="[\u@\h \W]\$ "' >> ~/.bash_profile
临时切换Shell的方法(可选)
如果只是想临时用Bash登录,不想永久修改,可以在SSH连接时指定Shell:
ssh 你的用户名@服务器IP -t /bin/bash
这个方法只会在当前会话生效,下次登录还是原来的Shell。
为什么不用修改SSHD配置?
修改/etc/ssh/sshd_config里的ForceCommand或Shell选项会影响所有用户的登录Shell,不符合你“只改特定账号、无副作用”的需求,所以chsh是最优解。
备注:内容来源于stack exchange,提问作者Juneyoung Oh
相关产品推荐
相关产品推荐

