Як ви робите зрозумілим, що перебуваєте у виробничій системі?


135

Кілька з нас у моїй компанії мають кореневий доступ на виробничих серверах. Ми шукаємо хороший спосіб зробити це надзвичайно зрозумілим, коли ми вступили.

Кілька ідей у ​​нас були:

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

Які методи ви використовуєте для диференціації виробничих систем?


11
Чи є якийсь спосіб навчити людей уникати перешкод до виробничих систем? Якщо, наприклад, у вас все зареєстровано в Ляльковий, вам потрібно буде лише увійти у виробничі системи для усунення несправностей.
Алекс Холст

37
Ви дозволяєте root-ssh доступ у своїх виробничих системах ???? !!!!!
symcbean

7
@symcbean: це не те, що сказав Сіоніде. Він міг би мати на увазі після того, як ви введете SSH у свій обліковий запис користувача.
Zan Lynx

3
Чи стає це питання кандидатом на вікі спільноти?
MadHatter

15
Ви можете зробити це надзвичайно зрозумілим, що це виробнича система, відключивши SSH до неї. Це не може бути більш зрозумілим, ніж це.
Франці Пенов

Відповіді:


137

Червоний підказки - хороша ідея, якою я також користуюся.

Ще одна хитрість - вкласти у файл велике попередження ASCII /etc/motd.
Якщо щось подібне вітає вас під час входу, вам слід привернути увагу:

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


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


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

Ви можете створити таке попередження на цьому веб-сайті або скористатися figlet командою.

філе

Як Ніколас Сміт запропонував у коментарях, ви можете за допомогою cowsayкоманди командувати речі драконами чи іншими тваринами .

драконова корова

Замість використання файлу / etc / motd ви також можете зателефонувати cowsayабо figletу .profileфайл.


3
Ой, мені це подобається!
Sionide21

13
Якщо ви ввели якусь команду, ви більше не побачите цього.
Нілс

3
Правда, саме тут корисний червоний рядок.
Kenny Rasschaert

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

8
Я хотів би додати дракона ASCII в суміш.
Ніколас Сміт

80

Не зовсім те саме, але цей веб-сайт рекомендує розробникам носити рожеве сомбреро під час внесення змін у виробничі системи. Напевно, у вас може бути схоже правило щодо вторгнення в них.

розробник в рожевому сомбреро


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

7
Так, вам доведеться змінити процес, щоб він був: 1) Заявіть про бажання редагувати виробництво. 2) Вийміть сомбреро і закрийте всі інші вікна. 3) Робіть виробничі речі, поки всі дивляться. 4) Вийдіть із сеансу та видаліть сомбреро.
Aric TenEyck

1
"2) Вийміть сомбреро та закрийте всі інші вікна" Це не справді спрацює в моїй компанії, оскільки це крок 2 всіх наших СОП. Крок 1 - це, звичайно, "увімкніть світло", тому що при закритих вікнах у цьому кабінеті може бути досить темно.
Парфянський розстріл

50

Найбільший, який я використав, - це дискретна схема іменування, де prod-системи називаються явно різними, ніж тестові / розробкові екземпляри. Це робить стиль "Ім'я користувача @ ім'я хоста:" помітно іншим. І явно я маю на увазі більше, ніж просто різні слова, різні формати теж:

приклад: PRD-WEB001 проти DEVEL-BOB-WEB001

Для цього є кілька речей:

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

І найкраще, що для виробництва не потрібні спеціальні термінальні конфігурації, щоб уникнути помилок Oops.

На мій досвід, ви хочете чогось, що є постійним нагадуванням про те, де ви знаходитесь. Методи входу на зразок загадок корисні близько 10 секунд, поки ви не забудете, яке вікно, яке. Все, що потрібно, - це зробити lsв неправильному каталозі, щоб прокрутити зловісний банер для входу з поля зору, поховати вікно терміналу під вікном браузера, під час чогось гуглити, вкладку alt повернути в неправильне вікно і настає хаос. Найкраще мати постійну візуальну підказку, як значно інший командний рядок.


Це дуже добре працює для базових систем, але як тільки ви зміните dev- *, щоб prod- * devs стогне і стогне, як половина їх посилань перестає працювати (незалежно від того, скільки разів ви це робили раніше), а іноді і сама система кульгає на півроку, поки ви не зафіксуєте всі численні посилання на старе ім'я у конфігураційних файлах. Особливо з встановленим власним програмним забезпеченням, і псевдоніми DNS лише настільки допомагають. Ще гірше - легко забути підказку під час перемикання вікон повністю.
SilverbackNet

Розробникам потрібно створити налаштування, які працюють у програмах dev / test / staging / production (це я і роблю, але це вже інша історія). Про робочу "червону підказку" для bash (складніше, ніж здається) дивіться мою відповідь на сервері defaultfault.com/a/479718/79266
RichVel

39

Одне, що потрібно пам’ятати, це те, що це має бути постійним нагадуванням, а не лише показником під час входу. Дуже часто хтось матиме декілька снарядів, які працюють одночасно на різних вкладках і рухатимуться між ними. Деякі будуть дев, деякі - виробництвом. Отже, коли ви виконуєте команду, вам потрібно мати індикатор у цій точці. Отже, маючи спеціальне підказку - найкращий метод, на мій досвід, коли модифікований рядок заголовка / вкладки є гарним доповненням до цього, щоб легко знайти потрібне вікно / вкладку.

Тому я рекомендую мати кольоровий підказку (червоний - очевидний вибір) та всі літери для імені хоста, з аналогічною поведінкою для користувача (привілейованою та непривілейованою) як вашим підказом. Деякі приклади:

Приклад кольорових підказок

Зазвичай щось подібне

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

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


Про робочу "червону підказку" для bash (складніше, ніж здається) дивіться мою відповідь на сервері defaultfault.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

Робота над виробничою машиною з простим кореневим рахунком ніколи не є доброю ідеєю.

Майте обліковий запис із повним дозволом на судо. Не дозволяє зберегти сеанс судо. Заборонити sudo su. Використовуйте для нього окремий пароль (не той, який ви маєте для своєї розроблювальної машини). Можливо, налаштувати sudo для повідомлення про виробничу ідентифікацію оболонки перед виконанням команди (через псевдонім).

Це зробить випадкові помилки досить важкі. І червоний підказки ніколи не шкодить.


а під "sudo su" ви маєте на увазі "sudo -i" або принаймні "sudo su -", правда?
Спарр

Ого! це Спарр! Маленький світ :)
Sionide21

1
Не можна завадити людям мати кореневу оболонку. ( sudo bash). Ви можете отримати кореневу оболонку з будь-якої установки "чорного списку". (Якщо ви уважні, ви можете зупинити це налаштуванням білого списку, але це, як правило, не гарантується.)
user606723

1
Він не повинен перешкоджати наміченому доступу до кореневої оболонки - лише деякі поширені способи, до яких люди звикли, щоб вони могли це робити підсвідомо, не звертаючи ніякої уваги.
Mihails Strasuns

8

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

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

Це виглядає приблизно так:

скріншот червоного запиту

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

Також включає додаткову функцію для синхронізації історії ваших башів у всіх вікнах терміналів, відповідно до цієї відповіді . Це добре, але не всі хочуть цього, тому його за замовчуванням відключено.


5

Хоча я не знаю, як виглядає ваша ІТ-установка, одним із ефективних рішень було б мати спеціальну кімнату, до якої потрібно зайти в SSH на виробничі сервери як root. Якщо у вас є центр обробки даних, це може бути сама серверна кімната, але наявність окремого фізичного розташування, в якому «нормальна» робота не виконується, цілком ефективно послужить постійним нагадуванням про доступ до виробничих машин.


2
Хоча це, безумовно, буде ефективним, але для більшості ситуацій це також буде надзвичайно контрпродуктивним.
John Gardeniers

Я погоджуюся з Джоном, але це, безумовно, над чим подумати.
user606723

@JohnGardeniers: контрпродуктивний? Ти маєш на увазі, що це зашкодить продуктивності?
LarsH

@LarsH, необхідність займатись у різних кімнатах, щоб виконувати різні частини вашої роботи, безумовно, шкодить продуктивності. Вся ваша мережа повинна бути керованою з одного місця.
Джон Гарденєр

@JohnGardeniers: зрозумів. Коли ви спочатку говорили "контрпродуктивно", я думав, що ви мали на увазі, що його ефект суперечить заявленій меті, тобто служить постійним нагадуванням про те, що ви отримуєте доступ до виробничих машин.
LarsH

4

Просто налаштування вищенаведених пропозицій. Я використовую CDE як робочий стіл Unix і всі виробничі системи, до яких я отримую доступ через меню в .dt / dtwmrc. У всіх системах розробки та 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 Remote Desktop (редакція 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 (автовипуск) у виробничій системі.


1
Тільки як це дає зрозуміти? Це також може бути дуже небезпечним, оскільки команди або процеси можуть працювати, і раптом вони будуть перервані, якщо сеанс вийшов із системи.
Джон Гарденєр

3
Я щойно перевірив TMOUT, і схоже, що якщо працює тривала команда, вона не припиняє сеанс. Він припиняється лише тоді, коли ви сидите в командному рядку. Нілс також запропонував це, і для мене це має сенс.
sjbotha

1
Це справді приємна річ про TMOUT. Перед тим, як виявити TMOUT, ми використовували autolog або навіть убивцю. автолог і вбивця НЕ так приємно. killerd також баггі і прагне заблокувати один повний процесор ...
Nils

2

Зважаючи на великі нормативні вимоги під час роботи в певній галузі, тут діяльність кожного є ключовою для будь-яких майбутніх суперечок. Через це доступ також обмежений, і вам доведеться перестрибувати декілька "меню", які дозволяють вам отримати доступ до машини як один із кількох надійних користувачів. Налаштувавши цю систему, людина повинна коротко обрати ВИРОБНИЦТВО чи середовище ЯК, а потім вибрати зі списку хоста, до якого хочуть отримати доступ. У нього також є період очікування, щоб ви не стикалися з ситуацією входу на провідний хост і не забували, в якому середовищі ви знаходитесь наступного дня.


2

я використовую швидкі зміни, як і інші. Це швидко і неприємно, але добре працює в моїх цілях. Це дасть вам червоний колір як звичайний користувач у виробничій системі, а червоний верхній регістр як корінь у системі prod.

Це може бути написано меншими рядками, але я роблю це так, щоб я міг налаштувати інші 2 випадки (не root-non prod), якщо я хочу.

Ми працюємо над припущенням, що виробничий сервер не використовує DHCP, але ви можете використовувати будь-який інший метод для розробки, якщо його система prod. Що б не працювало для вас.

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

1
коней на курси дійсно. наші системи розробників використовують резервування dhcp. Ви можете використовувати будь-яку систему, яка працює для вас, наприклад порівняти ім'я хоста, підмережу, vlan і все.
Сірекс

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

1
Так. Ви завжди можете мати пакет rpm ролі, який створює файл / etc / PRODUCTION і тестує на це. Що б не плавав ваш човен.
Sirex

1

Майте інший (можливо довший) пароль на виробничих машинах.

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


.. Інший корінний пароль на машинах prod? чому я не подумав про це !?
user606723

Також у sudo вже є безліч варіантів конфігурації. Я був би здивований, якщо ви вже не можете цього зробити. Спеціальне судо - жахлива ідея, оскільки його не вистачить, щоб отримати суїдський біт.
user606723

1

Тут у нас є конфігурації шпаклівки за замовчуванням, щоб зробити колір переднього плану всього екрану яскравим рожевим.

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

Це працює досить добре, але мені подобаються деякі інші ідеї тут.

  • Pro: якщо щось не використовує колір переднього плану .., ВСЕ Екран prod яскраво-рожевий.
  • Con: Очевидно, що якщо ви прослуховуєте щось, крім конфігурації putty за замовчуванням, це нічого не робить.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.