Как вы делаете очевидным, что вы находитесь в производственной системе?


135

У некоторых из нас в моей компании есть root-доступ на производственных серверах. Мы ищем хороший способ сделать это чрезвычайно ясным , когда мы ssh'd в.

У нас было несколько идей:

  • Ярко-красная подсказка
  • Ответьте на загадку, прежде чем получить оболочку
  • Введите случайное слово, прежде чем получить оболочку

Какие методы вы используете, ребята, чтобы дифференцировать производственные системы?


11
Есть ли способ научить людей избегать ssh'ing для производственных систем? Например, если у вас все проверено в Puppet, вам нужно всего лишь войти в производственные системы для устранения неполадок.
Алекс Холст

37
Вы разрешаете root ssh доступ на ваших производственных системах ???? !!!!!
Symcbean

7
@symcbean: это не то, что сказал Сионид. Он мог означать после того, как вы SSH в вашей учетной записи пользователя.
Zan Lynx

3
Этот вопрос становится кандидатом в вики сообщества?
MadHatter

15
Вы можете сделать это чрезвычайно ясно, что это производственная система, отключив SSH к нему. Это не может быть более ясно, чем это.
Франци Пенов

Ответы:


137

Красная подсказка - хорошая идея, которую я тоже использую.

Еще один трюк - поместить в /etc/motdфайл большое предупреждение в стиле ASCII .
Когда вы входите в систему, вас приветствует нечто подобное:

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


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


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

Вы можете создать такое предупреждение на этом сайте или использовать figlet команду.

figlet

Как предложил Николас Смит в комментариях, вы можете оживить ситуацию с помощью некоторых драконов или других животных, используя cowsayкоманду.

дракон корсей

Вместо использования файла / etc / motd вы также можете вызвать cowsayили figletв .profileфайл.


3
Ох, мне это нравится!
Sionide21

13
Если вы ввели какую-то команду, вы больше этого не увидите.
Нильс

3
Правда, вот где красный подсказка пригодится, хотя.
Кенни Рассчарт

41
На серверах Windows я использую ярко-розовый цвет рабочего стола и ярко-желтые заголовки / цветовую схему, так что это действительно очень очевидно. Это наша версия цветной командной строки
Марк Хендерсон

8
Я хотел бы добавить драконов ASCII в микс.
Николас Смит

80

Не совсем то же самое, но этот веб-сайт рекомендует, чтобы ваши разработчики носили розовое сомбреро при внесении изменений в производственные системы. Возможно, вы могли бы иметь подобное правило для sshing в них.

разработчик в розовом сомбреро


1
Ха - ха! +1 потому что я LOL'd. А если серьезно, люди могут искать свои недостающие очки, надевая их, я сомневаюсь, что шляпа послужит «постоянным напоминанием». Кроме того, это не поможет вам вспомнить, какое окно является каким.
Феликс Домбек

7
Да, вам нужно изменить процесс так: 1) Объявить желание редактировать производство. 2) Выйдите из сомбреро и закройте все остальные окна. 3) Делайте продакшн, пока все смотрят. 4) Выйдите из сессии и удалите сомбреро.
Aric TenEyck

1
«2) Выйдите из сомбреро и закройте все остальные окна». Это не будет работать в моей компании, так как это второй шаг всех наших СОП. Шаг 1, конечно, «включает свет», потому что с закрытыми окнами в офисе может стать довольно темно.
Парфянский выстрел

50

Самым большим, что я использовал, является дискретная схема именования, в которой prod-системы названы явно не так, как экземпляры test / dev. Это делает подсказку стиля «Имя пользователя @ Имя хоста:» заметно другой. Под очевидным я подразумеваю не только разные слова, но и разные форматы:

пример: PRD-WEB001 против DEVEL-BOB-WEB001

Для этого есть несколько вещей:

  • Дополнительный гипеназированный блок делает его набором из трех, а не набором из двух.
  • Первый из набора другой длины.
  • Общая длина имен заметно отличается, что делает интервал командной строки разным относительно друг друга и другого текста в окне.

И что самое приятное, он не требует специальных терминальных настроек для производства, чтобы избежать ошибок Oops.

По моему опыту, вы хотите что-то, что является постоянным напоминанием о том, где вы находитесь. Методы входа в систему, такие как загадки, хороши в течение 10 секунд, пока вы не забудете, какое окно какое. Все, что нужно, это сделать lsв неправильном каталоге, чтобы прокрутить зловещий баннер входа в систему, скрыть окно терминала под окном браузера, одновременно что-то погугливая, alt-tab вернуться в неправильное окно, и может возникнуть хаос. Лучше всего иметь некоторую постоянную визуальную подсказку, например значительно отличающуюся командную строку.


Это очень хорошо работает для базовых систем, но как только вы переключаете dev- * на prod- *, разработчики стонут и стонут, когда половина их ссылок перестает работать (независимо от того, сколько раз вы делали это раньше), и иногда Сама система бездействует, пока вы не исправите все многочисленные ссылки на старое имя в конфигурационных файлах. Особенно с установленным проприетарным программным обеспечением, и псевдонимы DNS только очень помогают. Еще хуже то, что при переключении окон легко забыть подсказку.
SilverbackNet

Разработчикам нужно создавать настройки, которые работают через dev / test / staging / production (это то, что я делаю, но это другая история). Для рабочего «красного приглашения» для bash (сложнее, чем кажется), см. Мой ответ на serverfault.com/a/479718/79266
RichVel

39

Необходимо помнить одну вещь: это должно быть постоянным напоминанием, а не просто индикатором во время входа в систему. Очень часто кто-то запускает несколько оболочек одновременно на разных вкладках и перемещается между ними. Некоторые будут разработки, некоторые производства. Поэтому, когда вы запускаете команду, у вас должен быть индикатор в этой точке. Поэтому, по моему опыту, наличие специального приглашения - лучший способ, с измененной панелью заголовка / вкладки, которая является хорошим дополнением к этому для легкого поиска нужного окна / вкладки.

Поэтому я бы рекомендовал иметь цветное приглашение (красный - очевидный выбор) и все заглавные буквы для имени хоста, с поведением пользователя (привилегированным или непривилегированным), аналогичным вашему приглашению. Некоторые примеры:

пример цветных подсказок

Обычно что-то вроде

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

в вашем файле запуска оболочки. Это для синих. Заменить 44с 41еловой красным, и 42для зеленого. Также доступны другие цвета и дикие узоры .


Для рабочего «красного приглашения» для bash (сложнее, чем кажется), см. Мой ответ на 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 и т. Д.
Zan Lynx

13

Просто учтите, что ваши вторые и третьи идеи помогают во время первоначального подключения, но не имеют значения, когда у вас открыто несколько терминалов и вы переходите с одного на другой. Идея использования имен в sysadmin1138 хороша, когда ее можно применить, но есть множество случаев, когда это невозможно.

Единственное, что я нашел действительно стоящим, это цветная подсказка. Мне нравится зеленый для разработки / тестирования, красный для производства и синий для машин в DMZ. Таким образом, даже если у меня есть две машины с одинаковым именем (в разных сетях), например, при подготовке замены машины, я все равно могу легко определить, на какой машине я работаю.


11

Красная / специальная командная строка хороша. Другая вещь может быть более быстрым автоматическим выходом из системы на этих машинах, используя переменную TMOUT. Если вы открыли много окон, производственные окна уйдут быстрее.

Это должно привести к другому поведению:

  1. развивать
  2. Контрольная работа
  3. Внесите свои изменения в промежуточный сервер
  4. Только после этого можно быстро перейти к производству и развертыванию там (точно так же, как вы делали это на промежуточном сервере).

9

Работа на производственном компьютере с учетной записью простого root никогда не будет хорошей идеей.

Иметь учетную запись с полными разрешениями sudo. Не позволяет сохранить сессию sudo. Запретить sudo su. Используйте для этого отдельный пароль (не тот, который у вас есть для вашей машины). Вероятно, настроить sudo, чтобы уведомить о производственной идентичности оболочки перед выполнением команды (через псевдоним).

Это сделает случайные ошибки довольно трудными. И красная подсказка никогда не болит.


и под "sudo su" вы подразумеваете "sudo -i" или, по крайней мере, "sudo su -", верно?
Спарр

Вау! это спарр! Маленький мир :)
Sionide21

1
Невозможно помешать людям иметь корневую оболочку. ( sudo bash). Вы можете получить корневую оболочку из любой настройки «черного списка». (Если вы осторожны, вы можете остановить его с помощью настройки белого списка, но это, как правило, не гарантируется.)
user606723 20.10.11

1
Он не должен препятствовать предполагаемому доступу к корневой оболочке - только некоторые распространенные способы, которыми люди так привыкли, чтобы они могли делать это подсознательно, не обращая никакого внимания.
Михаилс Страсунс

8

Я пошел с красной подсказкой и нашел довольно трудоемким найти рабочий код для .bashrc.

Итак, вот моя версия, готовая для включения в .bashrc- https://github.com/RichVel/nicer-bash-prompt . Он полностью зависит от имени хоста, поэтому, если у вас есть подходящий шаблон для рабочих имен хостов (скажем xyprod01, xyprod02и т. Д.), Он будет работать хорошо, и вы сможете использовать его .bashrcво всех средах.

Это выглядит так:

скриншот красной подсказки

Это создает более приятное приглашение bash, включая красное приглашение на рабочих хостах, также показывает текущую ветку git и последние 2 каталога в $ PWD. Следует избегать путаницы с отображением подсказок при выполнении Ctrl / R (обратный поиск) в bash.

Также включает в себя дополнительную функцию для синхронизации вашей истории Bash по всем окнам терминала, в соответствии с этим ответом . Это хорошо, но не всем это нужно, поэтому по умолчанию оно отключено.


5

Хотя я не знаю, на что похожа ваша ИТ-установка, одним из эффективных решений может быть наличие специальной комнаты, в которой вы должны перейти на SSH на рабочие серверы с правами root. Если у вас есть центр обработки данных, это может быть сама серверная комната, но наличие отдельного физического местоположения, из которого «обычная» работа не выполняется, будет достаточно эффективно служить постоянным напоминанием о том, что вы получаете доступ к рабочим машинам.


2
Хотя это, безусловно, будет эффективным, для большинства ситуаций это также будет крайне контрпродуктивно.
Джон Гарденье

Я согласен с Джоном, но об этом, безусловно, стоит подумать.
user606723 20.10.11

@JohnGardeniers: контрпродуктивно? Вы имеете в виду, что это повредит производительности?
LarsH

@LarsH, необходимость без необходимости ходить в разные комнаты, чтобы выполнять разные части своей работы, наверняка снижает производительность. Вся ваша сеть должна быть управляемой из одного места.
Джон Гарденье

@JohnGardeniers: понял. Когда вы изначально говорили «контрпродуктивно», я думал, что вы имели в виду, что его эффект противоречит заявленной цели, то есть служит постоянным напоминанием о том, что вы получаете доступ к производственным машинам.
LarsH

4

Просто поправьте приведенные выше предложения. Я использую CDE в качестве рабочего стола Unix и все производственные системы, к которым у меня есть доступ через меню в .dt / dtwmrc. Во всех системах dev и UAT я придерживаюсь своей обычной цветовой схемы, но в системах prod я установил для терминала красный фон. Мне не нравится внешний вид, но в этом вся суть.

Эта - пропустил предложение Кароля в основном то же самое


4

Когда я вхожу в рабочую машину, я получаю параграф, предупреждающий меня о том, что это рабочая машина, а также краткий список рекомендаций. Я могу позвонить в службу поддержки UNIX, если не думаю, что смогу выполнить свою задачу в одиночку безопасно, напоминание о том, что взрыв производственного компьютера может стоить мне работы, и напоминание о том, что все, что я делаю, записывается в журнал.

редактировать: я работаю в транспортной отрасли.


Уч. Хотя я понимаю необходимость в этом, я рад, что не работаю в такой среде.
LarsH

1
Я рад, что я работаю на транспорте, и эти системы не просто стоят денег, когда они выходят из строя, они стоят жизни.
Василий

Я рад, что ты так осторожен!
LarsH

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

Этот Applescript запускается после установления сеанса SSH. Он устанавливает цвет фона терминала в соответствии со значениями RGB (или возвращается к значению по умолчанию, если значения цвета не предоставлены). Потенциально сложная часть состоит в том, чтобы перехватить конец сеанса SSH, чтобы вернуть цвета по умолчанию. Для этого я создал следующий сценарий оболочки как ~ / 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

Я написал это решение неделю назад и с тех пор использую его. Я надеюсь, что другие найдут это ценным. Я считаю, что это работает лучше, чем любое из решений, которые я нашел от Google.


3

Моя группа использует концепцию удаленного рабочего стола visionapp (редакция 2017 года: похоже, продукт был переименован, но я думаю, что он одинаков) для RDP на компьютерах с Windows и SSH на Linux. Наши соединения сгруппированы в папки по уровням и им назначен цвет вкладки.

Поэтому всякий раз, когда мы открываем производственную связь - БАМ! - мы получаем немного ярко-красного на нашем лице:

введите описание изображения здесь

Это определенно стоит вложений, если вы большой магазин Windows и сильно полагаетесь на RDP. Бьюсь об заклад, есть и другие замечательные инструменты, если все, что вам нужно, это SSH.


2

Помимо уникального приглашения (которое кажется наиболее надежным решением), если вы входите в систему с одной и той же рабочей станции, вы можете использовать разные профили для сеансов SSH.

Например, у меня есть красный фон для производственных систем, зеленый для разработки, синий для инфраструктуры (маршрутизаторы и т. Д.) И белый для локальной рабочей станции.

Если вы используете GNOME, есть простой способ запустить SSH-соединение с нужным профилем:

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

Основной недостаток - это клиентская сторона, поэтому специальное приглашение все равно будет лучшим выбором, если вы обращаетесь к серверам из разных мест.


2

Еще один способ прояснить, что вы работаете в производственной системе - это установить функцию TMOUT (autologout) в производственной системе.


1
Просто как это прояснить? Это также потенциально очень опасно, так как команды или процессы могут быть запущены и внезапно прерваны после выхода из сеанса.
Джон Гарденье

3
Я только что проверил TMOUT, и похоже, что если выполняется долго выполняющаяся команда, сеанс не прерывается. Это завершает только когда вы сидите в командной строке. Нильс также предложил это, и это имеет смысл для меня.
sjbotha

1
Это действительно хорошая вещь о TMOUT. Мы использовали autolog или даже killerd, прежде чем обнаружили TMOUT. Аутолог и убийца не так хороши. killerd также глючит и имеет тенденцию блокировать один полный процессор ...
Nils

2

Из-за обширных нормативных требований при работе в конкретной отрасли, здесь деятельность каждого человека имеет ключевое значение для любых будущих споров. В связи с этим, доступ также ограничен, и вам нужно перепрыгнуть через несколько «меню», которые позволяют вам получить доступ к компьютеру как одному из нескольких доверенных пользователей. Установив эту систему, человек должен сознательно выбрать среду PRODUCTION или QA, а затем выбрать хост, к которому он хочет получить доступ, из списка. Это также имеет период ожидания, поэтому вы не можете войти в систему на хосте prod и забыть, в какой среде вы находитесь на следующий день.


2

Я использую быстрые изменения, как и другие здесь. Это быстро и противно, но отлично работает для моих целей. Это даст вам красный как обычный пользователь в производственной системе и красный верхний регистр как root в системе prod.

Это может быть написано в меньшем количестве строк, но я делаю это так, чтобы я мог настроить другие 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-адреса, как для разработки, так и для производства.
Мартейн Химельс

1
Лошади на курсы действительно. наши системы разработки используют резервирование dhcp. Вы можете использовать любую систему, которая вам подходит, например сравнить имя хоста, подсеть, vlan, что угодно.
Sirex

@Sirex, возможно и обратное. Например, Amazon EC2 VPS использует статическую аренду DHCP на производственных серверах и общедоступные IP-адреса. Сам экземпляр не знает, за каким публичным IP-адресом он работает, по крайней мере, не на уровне сетевого интерфейса.
Мэтью Шарли

1
Ага. У вас всегда может быть пакет RPM для роли, который создает файл / etc / PRODUCTION и тестирует его. Все, что плывет на твоей лодке.
Sirex

1

Иметь другой (возможно, более длинный) пароль root на рабочих машинах.

Вы можете создать специальный sudo (или оболочку sudo), чтобы специальное сообщение выводилось для производственных машин.


.. Другой пароль root на компьютерах прод? почему я не подумал об этом !?
user606723 20.10.11

Кроме того, у sudo уже есть множество параметров конфигурации. Я был бы удивлен, если вы уже не можете сделать это. Пользовательский sudo - ужасная идея, потому что он не будет протестирован достаточно, чтобы получить бит suid.
user606723 20.10.11

1

Здесь у нас есть конфигурации замазки по умолчанию, чтобы сделать основной цвет всего экрана ярко-розовым.

  • Продукт: ярко-розовый.
  • Регрессия: бледно-зеленая
  • Модель: бледно-голубая
  • Dev: нормальный

Это работает довольно хорошо, но мне нравятся некоторые другие идеи здесь.

  • Pro: если что-то не использует цвет переднего плана .., КАЖДЫЙ экран будет ярко-розовым.
  • Con: Очевидно, что если вы используете ssh через конфигурацию putty по умолчанию, это ничего не делает.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.