Назад | Перейти на главную страницу

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

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

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

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

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

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

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


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


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

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

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

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

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

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

пример: PRD-WEB001 vs DEVEL-BOB-WEB001

Здесь есть несколько вещей:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я выбрал красную подсказку, и поиск рабочего кода для .bashrc.

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

Выглядит это так:

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

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

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

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

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

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

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

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

Так что всякий раз, когда мы открываем производственное соединение - бац! - мы получаем ярко-красный цвет лица:

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

Вот что я сделал на своем 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.

Простой ответ? Измените цвет вашей оболочки на красный в конфигурации оболочки. Это будет совершенно очевидно и просто в настройке. Более того, в отличие от заголовков сервера, он не исчезнет после того, как вы введете несколько команд.

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

Разверните Window, щелкните Behavior. Введите что-нибудь в заголовке окна, например:

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

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

Из-за обширных нормативных требований при работе в конкретной отрасли, здесь все действия регистрируются в журналах для любых будущих споров. По этой причине доступ также ограничен, и вам нужно перепрыгнуть через несколько «меню», которые позволят вам получить доступ к машине как одному из немногих доверенных пользователей. Устанавливая эту систему, человек должен сознательно выбрать среду ПРОИЗВОДСТВА или контроля качества, а затем выбрать из списка хост, к которому он хочет получить доступ. У этого также есть период тайм-аута, поэтому вы не столкнетесь с ситуацией, когда вы войдете на хост prod и забудете, в какой среде вы находитесь на следующий день.

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

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

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

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

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

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

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

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

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

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

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

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

в .bashrc / .bash_profile

echo " THIS IS THE PRODUCTION SYSTEM. BE RESPONSIBLE.. " ..