我们公司中的一些人对生产服务器具有root访问权限。我们正在寻找一种很好的方法,使它在SSH进入时非常清晰。
我们有一些想法是:
- 亮红色提示
- 得到壳之前回答一个谜语
- 在获得外壳之前输入随机单词
你们用来区分生产系统的技术有哪些?
我们公司中的一些人对生产服务器具有root访问权限。我们正在寻找一种很好的方法,使它在SSH进入时非常清晰。
我们有一些想法是:
你们用来区分生产系统的技术有哪些?
Answers:
红色提示是一个好主意,我也使用过。
另一个技巧是在/etc/motd
文件中放置一个大的ASCII艺术警告。
登录时打招呼,应该引起您的注意:
_______ _ _ _____ _____ _____ _____ | __ __ | | | | _ _ | / ____ | | _ _ | / ____ | / \ | | | | __ | | | | | (___ | | |(___ / \ | | | __ | | | \ ___ \ | | \ ___ \ / / \ \ | | | | | | _ | | _ ____)| _ | | _ ____)| / ____ \ | _ | | _ | | _ | _____ | _____ / | _____ | _____ / / _ / \ _ \ _____ _____ ____ _____ _ _ _____ _______ _____ ____ _ _ | __ \ | __ \ / __ \ | __ \ | | | | / ____ | __ __ | _ _ / __ \ | \ | | | | __)| | __)| | | | | | | | | | | | | | || | | | \ | | | ___ / | _ / | | | | | | | | | | | | | | || | | | 。`| | | | | \ \ | | __ | | | __ | | | __ | | | ____ | | _ | || | __ | | | \ | | _ | | _ | \ _ \\ ____ / | _____ / \ ____ / \ _____ | | _ | | _____ \ ____ / | _ | \ _ | __ __ _____ _ _ _____ _ _ ______ | \ / | / \ / ____ | | | | _ _ | \ | | ____ | | \ / | / \ | | | | __ | | | | | \ | | | __ | | \ / | | // \ \ | | | __ | | | | 。`| __ | | | | | / ____ \ | ____ | | | | _ | | _ | | \ | | ____ | _ | | _ / _ / \ _ \ _____ | _ | | _ | _____ | _ | \ _ | ______ |
您可以在此网站上生成这样的警告,也可以使用figlet
命令。
就像尼古拉斯·史密斯在评论中建议的那样,您可以使用该cowsay
命令为一些龙或其他动物增添趣味。
除了使用/ etc / motd文件,您还可以调用cowsay
或figlet
在该.profile
文件中。
不太一样,但是此网站建议您在更改生产系统时让开发人员戴上粉红色的草帽。您可能有类似的规则可以将其插入。
我使用的最大的是离散的命名方案,其中prod-system的命名明显不同于test / dev实例。这使“ Username @ Hostname:”样式提示明显不同。很明显,我所指的不只是不同的单词,不同的格式:
示例:PRD-WEB001和DEVEL-BOB-WEB001
这有几件事情要做:
最重要的是,它仅需避免Oops错误,就不需要特殊的终端配置即可进行生产。
以我的经验,您想要的东西可以不断提醒您自己的位置。诸如谜语之类的登录方法大约持续10秒钟,直到您忘记了哪个窗口。它所要做的ls
就是在错误的目录中进行操作,以滚动显示不祥的登录横幅,将终端窗口埋入浏览器窗口中,同时进行一些谷歌搜索,将其按住Alt键又回到错误的窗口中,然后出现混乱情况。最好具有恒定的视觉提示,例如明显不同的命令提示符。
您需要记住的一件事是,这需要持续不断地提醒,而不仅仅是登录时的指示符。通常,某人会在不同选项卡中同时运行多个shell,并在它们之间移动。有些将是开发人员,一些是生产人员。因此,在运行命令时,此时需要一个指示器。因此,以我的经验来看,有一个特殊的提示是最好的方法,修改后的标题/标签栏是对它的很好补充,可以轻松地找到正确的窗口/标签。
因此,我建议您使用带颜色的提示符(红色是明显的选择),并为主机名设置大写字母,并在用户提示(特权与非特权)之间采用相似的行为。一些例子:
通常像
set prompt = "%{\033[1;44m%}`whoami`@`hostname -s`#%{\033[0m%} "`
在您的Shell启动文件中。这是蓝色的。更换44
用41
杉木红色和42
绿色。其他颜色和野生图案也可用。
这些是我的建议:
1)确保生产环境中的大多数命令(rm,chown,chmod,/ etc / init.d / *)需要sudo访问
2)使用PS1 / PS2表示用户在Prod服务器中
bash-3.2$ export PS1="[\u@\h \W]\$ "
这将命令提示符显示为
[sridhar@prodappserver901 conf]$
3)如果使用Putty / SSH客户端,则始终可以设置唯一的背景颜色/配置文件以使生产服务器脱颖而出。
在具有普通根帐户的生产计算机上工作从来都不是一个好主意。
有一个具有完整sudo权限的帐户。不允许保存sudo会话。禁止sudo su。为此使用单独的密码(而不是您的dev机器使用的密码)。大概调整sudo以在执行命令之前通知外壳的生产身份(通过alias)。
这将使意外错误变得非常棘手。红色提示永无伤害。
sudo bash
)。您可以从任何“黑名单”设置中获取root shell。(如果您小心的话,可以通过白名单设置将其停止,但是通常无法保证。)
我采用了红色的提示提示,并发现查找的工作代码非常繁琐.bashrc
。
因此,这里是我的版本,准备列入.bashrc
- https://github.com/RichVel/nicer-bash-prompt。它是完全由主机驱动的,所以只要你有一个合适的模式,以生产主机名(比如说xyprod01
,xyprod02
等等),它会工作得很好,你可以使用相同.bashrc
于各种环境。
看起来像这样:
这会创建一个更好的bash提示符,包括生产主机上的红色提示符-还向您显示当前的git分支以及$ PWD中的最后2个目录。在bash中执行Ctrl / R(反向搜索)时,请注意避免弄乱提示显示。
还包括一个可选功能,可按照此答案在所有终端窗口中同步您的bash历史记录。这很好,但并非所有人都想要它,因此默认情况下已禁用它。
尽管我不知道您的IT设置是什么样的,但一种可能有效的解决方案是拥有一个特殊的空间,您必须以root身份通过SSH进入生产服务器。如果您有一个数据中心,那么它可能就是服务器机房本身,但是拥有一个单独的物理位置(不进行“正常”工作)将非常有效地不断提醒您正在访问生产机器。
登录生产机器时,会出现一段警告我这是生产机器,以及一些简短的准则。如果我认为不能独自安全地执行任务,可以打电话给UNIX支持,提醒我炸毁一台生产机会花费我的工作,并提醒我所做的一切都已记录下来。
编辑:我在运输行业工作。
这是我在Mac上执行的操作。对于每个服务器,我都会在〜/ .ssh / config文件中为其添加一个条目,例如
Host app13
HostName server.example.com
User tom
PermitLocalCommand yes
LocalCommand osascript %d/bin/change_terminal_colours.scpt 12 35 35
一旦建立SSH会话,就会触发此Applescript。它将终端背景色设置为提供的RGB值(如果未提供颜色值,则将其恢复为默认值)。可能棘手的部分是拦截SSH会话的结束,以将颜色设置回默认值。为此,我将以下shell脚本创建为〜/ bin / ssh,以覆盖默认的ssh命令。这实际上是拦截并包装了对SSH命令的所有调用。我尝试使用别名和函数,但是此解决方案效果最佳:
#!/bin/bash
/usr/bin/ssh $@
osascript ~/bin/change_terminal_colours.scpt
这是change_terminal_colours.scpt脚本的来源。也将它放在您的〜/ bin目录中:
on run argv
tell application "Terminal"
# NOTE: Color values range from 0 to 65535.
if (count of argv) > 0 then
set backgroundColor to {(item 1 of argv) * 256, (item 2 of argv) * 256, (item 3 of argv) * 256}
else
set backgroundColor to background color of default settings
end if
try
set background color of (selected tab of front window) to backgroundColor
end try
end tell
end run
我一周前写了这个解决方案,从那以后一直在使用它。我希望其他人觉得它有价值。我发现它比Googling发现的任何解决方案都更好。
我的小组使用visionapp远程桌面(2017年编辑:看起来产品已重命名,但我认为是相同的)同时用于RDP到Windows计算机和SSH到Linux计算机。我们的连接按层分组到文件夹中并分配标签颜色。
因此,每当我们打开生产连接时-bam!-我们的脸上有些鲜红色:
如果您是Windows大型商店并且非常依赖RDP,那绝对是一笔值得的投资。我敢打赌,如果您只需要SSH,那么还有其他出色的工具。
清楚表明您正在生产系统上的另一种方法是在生产系统上设置TMOUT(自动注销)功能。
我在这里使用提示更改,就像其他人一样。它既快速又讨厌,但是可以很好地用于我的目的。在生产系统上,它将以普通用户的身份给您红色,在生产系统上以root的身份给您红色的大写字母。
它可以用更少的行写,但是我这样做是这样,所以我可以调整其他2种情况(非root-non prod)。
我们假设生产服务器不使用DHCP,但是您可以使用任何其他方法来计算生产系统。一切为您服务。
productionSrv=1
grep -qi bootproto=dhcp /etc/sysconfig/network-scripts/ifcfg-*
if [ "$?" -eq 0 ]; then
productionSrv=0
fi
hostName=`hostname`
userName=`whoami`
if [ $userName == "root" ]
then
if [ "$productionSrv" == 1 ]
then
hostName=`echo $hostName | tr [:lower:] [:upper:]`
PS1='[\e[0;31m]\u[\e[0m]@[\e[0;31m]$hostName[\e[0m][$?][\e[0;31m][\W][\e[0m][\e[0;31m]\$[\e[0m]: '
else
PS1='[\e[0;31m]\u[\e[0m]@[\e[0;35m]$hostName[\e[0m][$?][\e[0;31m][\W][\e[0m][\e[0;31m]\$[\e[0m]: '
fi
PATH=$PATH:/sbin/
else
if [ "$productionSrv" == 1 ]
then
PS1='[\e[0;32m]\u[\e[0m]@[\e[0;31m]$hostName[\e[0m][$?][\e[0;31m][\W][\e[0m][\e[0;32m]\$[\e[0m]: '
else
PS1='[\e[0;32m]\u[\e[0m]@[\e[0;35m]$hostName[\e[0m][$?][\e[0;31m][\W][\e[0m][\e[0;32m]\$[\e[0m]: '
fi
fi