录屏或日常使用时,我们常想隐藏终端提示符里的 用户名@主机名,避免泄露本机用户名;但在 SSH 远程登录时,提示符里显示 user@host 反而很重要------它能提醒你"当前在远程机器上",降低误操作风险。
本文给出一套更安全的方案:
- ✅ 本机:隐藏
user@hostname - ✅ SSH 登录:仍显示
user@hostname - ✅ 保留目录路径、Git 分支/状态(agnoster 原有功能不受影响)
- ✅ 尽量不改主题文件(更可维护)
核心思路:利用 agnoster 的 DEFAULT_USER + SSH_CLIENT 判断
agnoster 主题里通常有类似逻辑:
- 当
$USER == $DEFAULT_USER且 不是 SSH 时,不显示user@host - 当检测到 SSH 登录(
$SSH_CLIENT不为空)时,显示user@host
也就是说,只要我们把 DEFAULT_USER 设置为本机默认用户,就能达到:
- 本机:用户就是默认用户 → 不显示
- SSH:有
SSH_CLIENT→ 强制显示
第 1 步:在 .zshrc 设置 DEFAULT_USER(推荐做法)
打开 ~/.zshrc:
bash
vim ~/.zshrc
加入(或修改)这一行:
bash
export DEFAULT_USER="$USER"
保存退出后生效:
bash
source ~/.zshrc
验证
-
本机新开一个终端窗口:提示符里应不再显示
用户名@主机名 -
SSH 到任意服务器:
bashssh user@server进入后提示符应显示
user@host
如果你设置了 DEFAULT_USER 仍然没效果:检查 agnoster 的 context 配置
有些人之前为了"彻底隐藏用户名"把 prompt_context() 改空了:
bash
prompt_context() { }
如果你这么做了,那么 SSH 时也不会显示(因为整个模块都被关掉了)。
想要"本机隐藏、SSH 显示",就必须让 prompt_context() 恢复为"带 SSH 判断"的版本。
找到你正在使用的主题文件
- 如果你用的是原主题:
~/.oh-my-zsh/themes/agnoster.zsh-theme - 如果你用的是自定义副本(推荐):
~/.oh-my-zsh/custom/themes/xxx.zsh-theme
在 ~/.zshrc 查看主题名:
bash
grep -n 'ZSH_THEME=' ~/.zshrc
第 2 步(可选):确保 prompt_context() 的逻辑正确(本机隐藏 / SSH 显示)
打开你正在用的 agnoster 主题文件,例如:
bash
vim ~/.oh-my-zsh/themes/agnoster.zsh-theme
# 或
vim ~/.oh-my-zsh/custom/themes/agnoster-nouser.zsh-theme
搜索 prompt_context(vim 里输入 /prompt_context 回车),确保它类似下面这样:
bash
prompt_context() {
if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
prompt_segment black default "%(!.%{%F{yellow}%}.)%n@%m"
fi
}
这段逻辑的含义是:
- 非默认用户(例如切到 root)→ 显示
user@host - SSH 登录(
SSH_CLIENT存在)→ 显示user@host - 本机默认用户且非 SSH → 不显示
user@host
%n 是用户名,%m 是主机名,所以 %n@%m 就是 user@host。
改完保存后执行:
bash
source ~/.zshrc
常见问题
1)为什么我 SSH 后还是不显示?
常见原因:
- 你把
prompt_context()置空了(prompt_context() { }) - 你修改的不是当前启用的主题文件(主题名不一致)
- 远程机器并没有加载 Oh My Zsh/agnoster(远程也需要配置才会显示)
2)如何在远程也生效?
需要远程机器也使用同样的 zsh + oh-my-zsh + agnoster 配置。
否则远程只会显示它自己的默认 shell 提示符。
回滚(恢复完全显示 user@host)
如果你想本机也显示,把 .zshrc 里这行删掉或注释:
bash
# export DEFAULT_USER="$USER"
然后:
bash
source ~/.zshrc
最终推荐配置(最少改动 + 最安全)
-
.zshrc加:bashexport DEFAULT_USER="$USER" -
主题文件里保持
prompt_context()带 SSH 判断(不要置空)
这样就能实现:本机隐藏用户名,SSH 时显示(安全提醒)。