我遇到过这样的问题:人们通过 ssh 登录某些服务器,却忘记特定终端不再是本地的。今天,有人尝试使用 关闭笔记本电脑sudo shutdown -h now
,并意外地关闭了服务器。
我想PS1
在通过 登录时更改这些服务器上bash 的颜色ssh
。我通过推送给它们的 debian 软件包来控制这些服务器。
推动全站 PS1 默认设置的最佳方式是什么?
显而易见的答案是创建一个/etc/profile.d/sshcolours
包含以下内容的文件,以使 user@host 变为紫色:
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ] ; then
PS1='\[\033[01;35m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
fi
bash
/etc/profile
将通过(来源)阅读该内容/etc/profile.d/*
。但是,它稍后会读取~/.bashrc
,这可能会PS1
根据$TERM
中的定义进行覆盖/etc/skel/.bashrc
。
有没有什么方法可以让我在不接触并且不强迫我的团队采用客户端更改的情况source
下进行站点范围的文件?~/.bashrc
~/.bashrc
这里有一些不好的想法:
设置后
$PS1
,~/.bashrc
有条件地来源/usr/share/bash-completion/completions/*
,这样我就可以把我的文件放在那里。但一些测试表明,条件不满足,或者/usr/share/bash-completion/bash_completion
恢复了环境。我
postinst
可以附加一行将我的文件源到每个用户的~/.bashrc
. 这感觉既非法又有问题:
for h in /home/*; do
if [ ! grep -q profile_amendments "$h/.bashrc" ] ; then
echo ". /etc/profile_amendments" >> "$h/.bashrc"
fi
done
您已经解释过您的用户需要能够在远程服务器上执行特权操作。如果没有他们的合作,我看不出有什么方法可以覆盖他们的提示、屏幕颜色等。例如,您可以要求他们
. /etc/profile_amendments
在其文件末尾添加 a ,但我不知道有什么办法可以强制执行此操作。.bashrc
.bash_profile
其余部分不会直接回答您的问题,而是更多地考虑替代解决方案。也许修改
sudo
配置会有所帮助。例如,使用visudo /etc/sudoers.d/lecture
创建这样的文件可能会有所帮助:然后,您可以用以下文本内容对其进行补充
/usr/local/etc/sudo-lecture.txt
参考
如果您的用户
$PS1
在他们的偏好中设置了他们的首选~/.bashrc
但没有设置$PROMPT_COMMAND
变量,您可以添加:To
/etc/bash.bashrc
(或系统上的等效项)在第一个提示之前[SSH]
添加紫色。$PS1
无论如何
/etc/profile
都是会话配置文件,而不是 shell 自定义文件。在 bash 5.1 或更高版本中,
$PROMPT_COMMAND
现在可以是一个数组(让人想起 zsh 的$precmd_functions
数组),因此您可以追加到该数组并在代码中仅取消设置该数组元素。与往常一样,当数组是稀疏数组并且获取最后一个元素的索引相当尴尬时,情况会更加麻烦:正如您所建议的,只要其余部分
/etc/bash.bashrc
(在该代码之前或之后)和用户~/.bashrc
也使用添加PROMPT_COMMAND+=('code')
代码而不是完全替换它,就可以避免像以前的方法一样删除这些代码。$PROMPT_COMMAND
unset -v PROMPT_COMMAND
除了更改提示之外,其他一些方法可能是更改终端默认背景和前景色(假设用户使用
xterm
类似终端模拟器),例如:对于浅紫色或黑色
如果用户倾向于喜欢深色背景,则适用于深紫色白色。
您还可以添加
\e]12;#ff0000\e\\
使光标呈亮红色,或更改字体等。/etc/profile
如果您愿意强制客户端在 tmux 会话中运行其 shell,您可以在, before 的末尾生成一个 tmux 会话~/.bashrc
,对底部栏进行着色,以便用户可以根据自己的~/.bashrc
意愿对提示进行任何更改不要凌驾于视觉提示之上。即,类似:
在......的最后
/etc/profile
; 默认情况下,这将生成一个带有绿色底部栏的 tmux 会话。/etc/profile
如果不是从终端中运行的 Bash 实例获取数据,则可以避免生成 tmux 实例,并避免递归地生成 tmux 实例。exit "$?"
将退出/etc/profile
并返回 tmux 的退出代码。在这个例子中,提示符是由
~/.zshrc
Grml 的修改版本设置的~/.zshrc
,但底部栏是由 中的 tmux 设置的/etc/zprofile
。所做的修改
~/.zshrc
仍然适用,并且我如何更改并不重要~/.zshrc
:底部栏将保留。同样的原则也适用于~/.bashrc
//etc/profile
。作为一个额外的好处,抄袭我自己在 Ask Ubuntu 上(阅读那里的答案以了解此方法的详细信息和限制),您可以扩展它以将底部栏自动设置为伪机器特定的颜色,以简化部署如果您希望底部栏的颜色伪唯一地标识每个服务器,请在不同的服务器上进行修改: