您如何使自己明显地处于生产系统中?


135

我们公司中的一些人对生产服务器具有root访问权限。我们正在寻找一种很好的方法,使它在SSH进入时非常清晰。

我们有一些想法是:

  • 亮红色提示
  • 得到壳之前回答一个谜语
  • 在获得外壳之前输入随机单词

你们用来区分生产系统的技术有哪些?


11
有没有什么方法可以教人们避免使用生产系统?例如,如果您已将所有内容都签入Puppet,则只需登录生产系统以进行故障排除。
亚历克斯·霍尔斯特

37
您是否允许在生产系统上进行root ssh访问?
symcbean 2011年

7
@symcbean:那不是Sionide所说的。在您SSH到您的用户帐户后,他本可以表示。
Zan Lynx

3
这个问题会成为社区Wiki的候选人吗?
MadHatter

15
您可以通过禁用SSH使其非常清楚,它是生产系统。没有比这更清楚的了。
弗朗西·佩诺夫(Francis Penov)2011年

Answers:


137

红色提示是一个好主意,我也使用过。

另一个技巧是在/etc/motd文件中放置一个大的ASCII艺术警告。
登录时打招呼,应该引起您的注意:

 _______ _ _ _____ _____ _____ _____            
| __ __ | | | | _ _ | / ____ | | _ _ | / ____ | / \    
   | | | | __ | | | | | (___ | | |(___ / \   
   | | | __ | | | \ ___ \ | | \ ___ \ / / \ \  
   | | | | | | _ | | _ ____)| _ | | _ ____)| / ____ \
   | _ | | _ | | _ | _____ | _____ / | _____ | _____ / / _ / \ _ \


 _____ _____ ____ _____ _ _ _____ _______ _____ ____ _ _ 
| __ \ | __ \ / __ \ | __ \ | | | | / ____ | __ __ | _ _ / __ \ | \ | |
| | __)| | __)| | | | | | | | | | | | | | || | | | \ | |
| ___ / | _ / | | | | | | | | | | | | | | || | | | 。`|
| | | | \ \ | | __ | | | __ | | | __ | | | ____ | | _ | || | __ | | | \ |
| _ | | _ | \ _ \\ ____ / | _____ / \ ____ / \ _____ | | _ | | _____ \ ____ / | _ | \ _ |


 __ __ _____ _ _ _____ _ _ ______ 
| \ / | / \ / ____ | | | | _ _ | \ | | ____ |
| \ / | / \ | | | | __ | | | | | \ | | | __   
| | \ / | | // \ \ | | | __ | | | | 。`| __ |  
| | | | / ____ \ | ____ | | | | _ | | _ | | \ | | ____
| _ | | _ / _ / \ _ \ _____ | _ | | _ | _____ | _ | \ _ | ______ |

您可以在此网站上生成这样的警告,也可以使用figlet 命令。

无花果

就像尼古拉斯·史密斯在评论中建议的那样,您可以使用该cowsay命令为一些龙或其他动物增添趣味。

龙考赛

除了使用/ etc / motd文件,您还可以调用cowsayfiglet在该.profile文件中。


3
哦,我喜欢!
2011年

13
如果您键入某些命令,您将不再看到该命令。
Nils,

3
没错,这就是红色提示派上用场的地方。
肯尼·拉沙特

41
在Windows服务器上,我使用了明亮的粉红色桌面颜色和明亮的黄色标题栏/配色方案,因此它确实非常明显。这是我们彩色命令提示符的版本
Mark Henderson


80

不太一样,但是此网站建议您在更改生产系统时让开发人员戴上粉红色的草帽。您可能有类似的规则可以将其插入。

戴着粉红色草帽的显影剂


1
哈哈!+1是因为我笑了。但是,严重的是,人们在戴眼镜时会寻找失踪的眼镜,我怀疑帽子会起到“不断提醒”的作用。同样,它也无助于您记住哪个窗口。
菲利克斯·丹贝克

7
是的,您必须将流程更改为:1)声明编辑作品的愿望。2)取出草帽并关闭所有其他窗口。3)在大家观看的同时做生产工作。4)注销会话并删除草帽。
Aric TenEyck

1
“ 2)放宽草帽并关闭所有其他窗口”这对我的公司而言实际上是行不通的,因为这是我们所有SOP的第二步。步骤1当然是“开灯”,因为在关闭窗户的情况下,该办公室可能会变得很暗。
Parthian Shot 2014年

50

我使用的最大的是离散的命名方案,其中prod-system的命名明显不同于test / dev实例。这使“ Username @ Hostname:”样式提示明显不同。很明显,我所指的不只是不同的单词,不同的格式:

示例:PRD-WEB001和DEVEL-BOB-WEB001

这有几件事情要做:

  • 多余的连字块使它成为三集,而不是二集。
  • 集合中的第一个是不同的长度。
  • 名称的总长度明显不同,这使得命令行间距相对于彼此以及窗口中的其他文本而言有所不同。

最重要的是,它仅需避免Oops错误,就不需要特殊的终端配置即可进行生产。

以我的经验,您想要的东西可以不断提醒您自己的位置。诸如谜语之类的登录方法大约持续10秒钟,直到您忘记了哪个窗口。它所要做的ls就是在错误的目录中进行操作,以滚动显示不祥的登录横幅,将终端窗口埋入浏览器窗口中,同时进行一些谷歌搜索,将其按住Alt键又回到错误的窗口中,然后出现混乱情况。最好具有恒定的视觉提示,例如明显不同的命令提示符。


这对于基本系统确实非常有效,但是一旦您将dev- *更改为prod- *,开发人员就会抱怨和抱怨,因为一半的链接停止工作(无论您之前做过多少次),有时系统本身会半途而废,直到您在配置文件中修复所有对旧名称的引用。特别是在安装了专有软件的情况下,DNS别名只能起到很大作用。更糟糕的是,在切换窗口时很容易完全忘记提示。
SilverbackNet

开发人员需要创建可在开发/测试/登台/生产中使用的设置(这就是我所做的,但这是另一回事)。有关bash的有效“红色提示”(比看起来更难),请参阅serverfault.com/a/479718/79266
RichVel 2013年

39

您需要记住的一件事是,这需要持续不断地提醒,而不仅仅是登录时的指示符。通常,某人会在不同选项卡中同时运行多个shell,并在它们之间移动。有些将是开发人员,一些是生产人员。因此,在运行命令时,此时需要一个指示器。因此,以我的经验来看,有一个特殊的提示是最好的方法,修改后的标题/标签栏是对它的很好补充,可以轻松地找到正确的窗口/标签。

因此,我建议您使用带颜色的提示符(红色是明显的选择),并为主机名设置大写字母,并在用户提示(特权与非特权)之间采用相似的行为。一些例子:

彩色提示示例

通常像

set prompt =  "%{\033[1;44m%}`whoami`@`hostname -s`#%{\033[0m%} "` 

在您的Shell启动文件中。这是蓝色的。更换4441杉木红色和42绿色。其他颜色和野生图案也可用


为庆典(难度比它看起来是),看到我在回答工作“红色提示” serverfault.com/a/479718/79266 -也表明git的分支,截断当前目录等
RichVel

14

这些是我的建议:

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客户端,则始终可以设置唯一的背景颜色/配置文件以使生产服务器脱颖而出。


#1是一个有趣的想法,但不切实际的,因为运行的后台程序的用户脚本可能需要使用RM,CHMOD等
咱山猫

13

只需考虑您的第二和第三个想法在初始连接过程中会有所帮助,但是当您打开多个终端并从一个终端移到另一个终端时,这毫无用处。可以应用sysadmin1138时,使用命名的想法很好,但是在很多情况下不能使用命名。

我发现唯一真正值得的是彩色提示。我喜欢绿色(用于开发/测试),红色(用于生产)和蓝色(用于DMZ中的机器)。这样,即使我有两台具有相同名称(在不同网络中)的机器(例如在准备替换机器时),我仍然可以轻松知道我在哪一台机器上。


11

红色/特殊命令提示符很好。另一件事可能是使用TMOUT变量在这些计算机上更快地自动注销。如果您打开了许多窗口,则生产窗口将消失得更快。

这应该导致不同的行为:

  1. 开发
  2. 测试
  3. 对登台服务器进行更改
  4. 然后,快速制作并部署到那里(就像您在登台服务器上所做的一样)

9

在具有普通根帐户的生产计算机上工作从来都不是一个好主意。

有一个具有完整sudo权限的帐户。不允许保存sudo会话。禁止sudo su。为此使用单独的密码(而不是您的dev机器使用的密码)。大概调整sudo以在执行命令之前通知外壳的生产身份(通过alias)。

这将使意外错误变得非常棘手。红色提示永无伤害。


用“ sudo su”表示“ sudo -i”或至少是“ sudo su-”,对吗?
Sparr

哇!是斯帕!小世界:)
Sionide21'2011/

1
阻止人们拥有根壳是不可能的。(sudo bash)。您可以从任何“黑名单”设置中获取root shell。(如果您小心的话,可以通过白名单设置将其停止,但是通常无法保证。)
user606723,2011年

1
它不应该阻止对根shell的预期访问-只是人们习惯的一些常用方法,使他们可以在不注意的情况下下意识地进行操作。
Mihails Strasuns 2011年

8

我采用了红色的提示提示,并发现查找的工作代码非常繁琐.bashrc

因此,这里是我的版本,准备列入.bashrc- https://github.com/RichVel/nicer-bash-prompt。它是完全由主机驱动的,所以只要你有一个合适的模式,以生产主机名(比如说xyprod01xyprod02等等),它会工作得很好,你可以使用相同.bashrc于各种环境。

看起来像这样:

红色提示的屏幕截图

这会创建一个更好的bash提示符,包括生产主机上的红色提示符-还向您显示当前的git分支以及$ PWD中的最后2个目录。在bash中执行Ctrl / R(反向搜索)时,请注意避免弄乱提示显示。

还包括一个可选功能,可按照此答案在所有终端窗口中同步您的bash历史记录。这很好,但并非所有人都想要它,因此默认情况下已禁用它。


5

尽管我不知道您的IT设置是什么样的,但一种可能有效的解决方案是拥有一个特殊的空间,您必须以root身份通过SSH进入生产服务器。如果您有一个数据中心,那么它可能就是服务器机房本身,但是拥有一个单独的物理位置(不进行“正常”工作)将非常有效地不断提醒您正在访问生产机器。


2
尽管这肯定是有效的,但在大多数情况下,它也会适得其反。
约翰·加迪尼尔

我同意约翰的观点,但这当然是要考虑的事情。
2011年

@JohnGardeniers:适得其反?您是说会损害生产力吗?
LarsH 2011年

@LarsH,不必要地进入不同的房间来完成工作的不同部分肯定会损害生产力。您的整个网络应该可以从单个位置进行管理。
John Gardeniers

@JohnGardeniers:了解。当您最初说“适得其反”时,我想您的意思是说它的作用与既定目的相反,即不断提醒您正在访问生产机器。
2011年

4

只是对以上建议进行了调整。我将CDE用作我的Unix桌面以及通过.dt / dtwmrc中的菜单访问的所有生产系统。在所有dev和UAT系统上,我保持正常的配色方案,但在产品系统上,我将终端设置为红色背景。我不喜欢这种外观,但是这很重要。

eta-错过了Karol提出的基本相同的建议


4

登录生产机器时,会出现一段警告我这是生产机器,以及一些简短的准则。如果我认为不能独自安全地执行任务,可以打电话给UNIX支持,提醒我炸毁一台生产机会花费我的工作,并提醒我所做的一切都已记录下来。

编辑:我在运输行业工作。


哎哟。虽然我可以理解对此的需求,但很高兴我没有在这种环境中工作。
LarsH 2011年

1
我很高兴-我在交通部门工作,这些系统在停机时不仅会花钱,还会导致生命损失。
罗勒,

很高兴您也这么小心!
2011年

3

在PuTTY中,您可以将窗口的标题更改为特定保存会话的默认名称。无论您在窗口内做什么,它始终保留在窗口上。这也会显示在任务栏中。

展开窗口,单击行为。在“窗口标题”中输入以下内容:

  * * * * * * * * * * * * PRODUCTION  * * * * * * * * * * * * PRODUCTION  * * * * * * * * * * * *

3

简单的答案?在外壳配置中将外壳的颜色更改为红色。它将是显而易见的,并且设置起来很简单。不仅如此,而且与服务器标头不同,在您键入一些命令后它不会消失。


3

这是我在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发现的任何解决方案都更好。


3

我的小组使用visionapp远程桌面(2017年编辑:看起来产品已重命名,但我认为是相同的)同时用于RDP到Windows计算机和SSH到Linux计算机。我们的连接按层分组到文件夹中并分配标签颜色。

因此,每当我们打开生产连接时-bam!-我们的脸上有些鲜红色:

在此处输入图片说明

如果您是Windows大型商店并且非常依赖RDP,那绝对是一笔值得的投资。我敢打赌,如果您只需要SSH,那么还有其他出色的工具。


2

除了独特的提示(这似乎是最可靠的解决方案)之外,如果您从同一工作站登录,则可以为SSH会话使用不同的配置文件。

例如,我的生产系统背景为红色,开发背景为绿色,基础设施(路由器等)为蓝色,本地工作站为白色。

如果您使用GNOME,则有一种简单的方法来启动具有所需配置文件的SSH连接:

gnome-terminal --window-with-profile=production -e 'ssh root@production.example.com'

主要缺点-在客户端,因此,如果要从其他位置访问服务器,则特别提示仍然是最好的选择。


2

清楚表明您正在生产系统上的另一种方法是在生产系统上设置TMOUT(自动注销)功能。


1
究竟如何使它变得清楚?这也可能非常危险,因为命令或进程可能正在运行,并且由于注销会话而突然中止。
约翰·加迪尼尔

3
我刚刚测试了TMOUT,看起来如果正在运行一个长时间运行的命令,它不会终止会话。仅当您坐在命令提示符下时,它才会终止它。尼尔斯也提出了这个建议,这对我来说很有意义。
sjbotha 2011年

1
这是TMOUT的真正好处。在发现TMOUT之前,我们使用了autolog甚至killerd。autolog和killerd并不是很好。killerd还是越野车,往往会阻塞一个完整的CPU ...
Nils

2

由于在特定行业中工作时对法规的要求很高,因此这里记录了每个人的活动,以防日后发生任何纠纷。因此,访问也受到限制,您必须跳过一些“菜单”,这些菜单使您可以作为少数几个受信任用户之一来访问计算机。通过设置此系统,人员必须有意识地选择PRODUCTION或QA环境,然后从列表中选择要访问的主机。这也有超时时间,因此您不会遇到登录产品主机并忘记第二天所处环境的情况。


2

我在这里使用提示更改,就像其他人一样。它既快速又讨厌,但是可以很好地用于我的目的。在生产系统上,它将以普通用户的身份给您红色,在生产系统上以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


尽管脚本很有趣,但是仅在生产系统上使用静态IP的假设并不常见。在大多数情况下,所有服务器在开发和生产中都将具有静态IP。
Martijn Heemels,2011年

1
真正的课程。我们的开发系统使用dhcp保留。您可以使用任何适合您的系统,例如比较主机名,子网,VLAN等。
Sirex

@Sirex,也可以相反。例如,Amazon EC2 VPS在生产服务器上使用静态DHCP租约,并转发公共IP。实例本身并不直接知道它背后运行的是哪个公共IP,至少在网络接口级别上是不知道的。
马修·沙利

1
对。您总是可以仅使用一个角色rpm包来创建/ etc / PRODUCTION文件并对此进行测试。无论您的船浮在水上。
Sirex

1

在生产计算机上使用不同(可能更长)的root密码。

您可以制作特殊的sudo(或sudo包装器),以便为生产机器输出特殊的消息。


..产品计算机上的其他root密码?我为什么没想到呢?
2011年

另外,sudo已经有很多配置选项。如果您还不能做到这一点,我会感到惊讶。自定义sudo是一个糟糕的主意,因为对其进行测试不足以获取suid位。
2011年

1

在这里,我们具有默认的腻子配置,以使整个屏幕的前景色变为亮粉红色。

  • 产品:亮粉色。
  • 回归:浅绿色
  • 型号:淡蓝色
  • 开发人员:正常

它工作得很好,但是我喜欢这里的其他一些想法。

  • Pro:除非某些东西不使用前景色。..否则,每个产品屏幕都是亮粉红色。
  • 缺点:很明显,如果您通过默认的腻子配置之外的其他方法进行SSH操作,则不会执行任何操作。

1

在.bashrc / .bash_profile中

echo " THIS IS THE PRODUCTION SYSTEM. BE RESPONSIBLE.. " .. 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.