Архив метки: Скрипты

📜 PowerShell: Скрипт автологина для подключений к удаленному рабочему столу

В быстро меняющемся мире ИТ и удаленной работы эффективность и методы экономии времени – на вес золота.

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

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

Скрипт PowerShell

Предоставленный сценарий PowerShell автоматизирует процесс входа в подключение к удаленному рабочему столу (RDC).

🌐 Rdesktop – клиент с открытым исходным кодом для протокола RDP от Microsoft

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

## Скрипт PowerShell для автоматического входа на удаленный рабочий стол



# Установите переменные для адреса сервера, имени пользователя и пароля

# Держите пароль в одинарной кавычке для обработки специальных символов

$Server = "rdc.example.com"

$User = "username"

$Password = 'password'



# Удалить все существующие учетные данные подключения к удаленному рабочему столу из диспетчера учетных данных Windows

cmdkey /list | ForEach-Object {

if ($_ -like "*target=TERMSRV/*") {

$credentialTarget = $_ -replace " ", "" -replace "Target:", ""

cmdkey /del:$credentialTarget

}

}



# Объявление о начале подключения к указанному удаленному рабочему столу

echo "Подключение к $Server"



# Сохранить учетные данные подключения к удаленному рабочему столу с помощью cmdkey

cmdkey /generic:TERMSRV/$Server /user:$User /pass:$Password



# Инициировать подключение к удаленному рабочему столу с указанным сервером

mstsc /v:$Server

Как работает скрипт

Настройка параметров подключения:

Первым шагом будет настройка адреса хоста системы удаленного рабочего стола и учетных данных для входа в систему.

🔐 Как защитить конкретную страницу паролем в Apache, Nginx, WordPress, на хостинге?

Вы можете задать переменные для адреса сервера, имени пользователя и пароля.

$Server="rdc.example.com"

$User="username"

$Password='password'

Очистка существующих учетных данных:

Затем код начинает с перечисления всех сохраненных учетных данных с помощью cmdkey /list, а затем отфильтровывает учетные данные для подключения к удаленному рабочему столу с помощью шаблона “target=TERMSRV/”.

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



cmdkey /list | ForEach-Object{

    if($_ -like "*target=TERMSRV/*"){

        cmdkey /del:($_ -replace " ","" -replace "Target:","")

    }

}

Показывает сообщение:

Скрипт выводит на экран сообщение о том, что соединение с удаленным рабочим столом установлено.

# Объявление о начале подключения к указанному удаленному рабочему столу 

echo "Подключение к $Server"

Сохранение учетных данных:

Скрипт использует cmdkey для создания общей записи учетных данных для сервера удаленного рабочего стола.

Этот шаг сохраняет имя пользователя и пароль, эффективно автоматизируя процесс входа в систему.

cmdkey /generic:TERMSRV/$Server /user:$User /pass:$Password


Инициирование подключения к удаленному рабочему столу: Наконец, сценарий вызывает mstsc с параметром /v:, чтобы указать адрес сервера, инициируя подключение к удаленному рабочему столу.

mstsc /v:$Server


Шаги реализации

Чтобы выполнить этот скрипт:

  • Сохраните приведенный выше скрипт в файле connect_remote_desktop.ps1
  • Замените “rdc.example.com”, “имя пользователя” и ‘password’ на реальный адрес сервера удаленного рабочего стола, имя пользователя и пароль.
  • Откройте PowerShell с правами администратора.
  • Перейдите в каталог со скриптом.
  • Введите .connect_remote_desktop.ps1, чтобы подключить удаленный рабочий стол.
  • В качестве альтернативы просто сохраните файл скрипта и правой кнопкой мыши выберите “Запустить с помощью PowerShell”.

Преимущества и соображения

Этот скрипт значительно упрощает процесс подключения к удаленному рабочему столу, особенно для ИТ-специалистов и удаленных работников, которые часто переключаются между различными серверами.

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

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

Этот скрипт – свидетельство силы автоматизации на современном рабочем месте.

см. также:

 



2024-03-15T10:11:07
Скрипты

📜 Создание переменных, доступных только для чтения, а также неизменяемых переменных в Bash

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

Внутри функции в Bash вы можете использовать ключевое слово local для определения переменной, и она может быть доступна только для чтения с помощью флага -r.

Вот несколько примеров использования и результатов:

#!/usr/bin/env bash



set -o errexit

set -o pipefail

set -o nounset



function mutable {

  local status="pending"



  status="completed"



  # This line will echo "completed".

  echo "${status}"

}



function immutable {

  local -r status="pending"



  # This line throws an error: "status: readonly variable"

  status="completed"



  # This line is never reached.

  echo "${status}"

}



mutable

immutable


Если вы хотите объявить переменные только для чтения вне функции, вы можете использовать declare -r status=”pending”, в то время как declare status=”pending” или status=”pending” оба являются изменяемыми.

В случае с read-only вы получите ту же ошибку, что и выше, если попытаетесь ее изменить.

Помните, что declare и local не соответствуют POSIX, поэтому, если вам нужна максимальная совместимость между оболочками, вам стоит рассмотреть другие варианты, например, использование readonly status=”pending”.

Я предпочитаю использовать declare -r, когда знаю, что мне не нужно соответствие POSIX, потому что declare используется для других вещей, например, для определения ассоциативных массивов.

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

Ясно выражать свои намерения полезно при чтении кода.

Если в большом скрипте вы видите readonly, declare -r или local -r, вы можете быть уверены, что больше ничего не измените, а если измените, то скрипт выдаст ошибку, что поможет избежать случайной перезаписи значения.

см. также:

 



2024-03-05T15:57:29
Скрипты

🖥️ Плагин Nagios для проверки использования памяти на Linux

В современной ИТ-инфраструктуре обеспечение работы серверов на пределе их возможностей имеет решающее значение для поддержания работоспособности и производительности системы.

Одним из ключевых аспектов управления серверами является мониторинг использования памяти.

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

Для решения этой проблемы мы представляем эффективное решение для мониторинга памяти:

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

Этот скрипт (https://github.com/tecrahul/nagios-plugins/blob/main/check_memory.sh) – свидетельство силы сотрудничества с открытым исходным кодом.

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

🖧 Основные номера сетевых портов на Linux

Зачем отслеживать использование памяти?

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

Без надлежащего мониторинга система может исчерпать память, что приведет к подкачке или свопингу, которые значительно снижают производительность.

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

Объяснение скрипта

Скрипт Bash предназначен для проверки использования памяти в системе в соответствии с заданными пороговыми значениями.

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

#!/bin/bash



# ==============================================================================

# SCRIPT: check_memory.sh

# AUTHOR: Rahul Kumar

# COPYRIGHT: tecadmin.net

# DESCRIPTION:

#   This script is designed to monitor and report on system memory usage. It

#   allows for warning and critical thresholds to be set for memory usage

#   percentages, providing alerts based on the specified criteria. The script

#   supports output in different units (Bytes, Kilobytes, Megabytes, Gigabytes)

#   for flexible monitoring requirements. This utility is particularly useful

#   for system administrators and monitoring tools like Nagios to keep an eye

#   on system health and perform proactive maintenance.

# 

# USAGE:

#   ./check_memory.sh [ -w  ] [ -c  ] [ -u  ]

#   -w, --warning=INTEGER[%]   Warning threshold as a percentage of used memory.

#   -c, --critical=INTEGER[%]  Critical threshold as a percentage of used memory.

#   -u, --unit=UNIT            Unit to use for output (b, K, M, G). Default: M

# 

# EXAMPLES:

#   ./check_memory.sh -w 80 -c 90 -u M

#   This command sets a warning threshold at 80% memory usage and a critical

#   threshold at 90%, with output in Megabytes.

# ==============================================================================



PROGNAME="check_memory"

VERSION='1.0'

FREECMD='/usr/bin/free'

UNIT='M' # Default unit

WARNING_THRESHOLD=80

CRITICAL_THRESHOLD=90



# Function to show usage

usage() {

  echo "Usage: $0 [ -w  ] [ -c  ] [ -u  ]"

  echo "   -w, --warning=INTEGER[%]   Warning threshold as a percentage of used memory."

  echo "   -c, --critical=INTEGER[%]  Critical threshold as a percentage of used memory."

  echo "   -u, --unit=UNIT            Unit to use for output (b, K, M, G). Default: $UNIT"

  exit 3

}



# Parse command line options

while getopts ":w:c:u:" opt; do

  case $opt in

    w) WARNING_THRESHOLD="$OPTARG" ;;

    c) CRITICAL_THRESHOLD="$OPTARG" ;;

    u) UNIT="$OPTARG" ;;

    ?) usage ;;

  esac

done



# Function to convert memory to the specified unit

convert_memory() {

  local memory=$1

  case $UNIT in

    b) echo $memory ;;

    K) echo $((memory / 1024)) ;;

    M) echo $((memory / 1024 / 1024)) ;;

    G) echo $((memory / 1024 / 1024 / 1024)) ;;

    *) echo "Error: Unknown unit $UNIT. Must be one of 'b', 'K', 'M', 'G'."; exit 3 ;;

  esac

}



# Extract memory data

total_bytes=$(grep MemTotal /proc/meminfo | awk '{print $2 * 1024}')

free_bytes=$(grep MemFree /proc/meminfo | awk '{print $2 * 1024}')

buffers_bytes=$(grep Buffers /proc/meminfo | awk '{print $2 * 1024}')

cached_bytes=$(grep "^Cached" /proc/meminfo | awk '{print $2 * 1024}')

available_bytes=$((free_bytes + buffers_bytes + cached_bytes))



# Convert to specified unit

total=$(convert_memory $total_bytes)

available=$(convert_memory $available_bytes)



# Calculate used memory

used=$(convert_memory $((total_bytes - available_bytes)))



# Calculate usage percentage

usage_percentage=$((100 - (available * 100 / total)))



# Compare usage against thresholds

if [ "$usage_percentage" -ge "$CRITICAL_THRESHOLD" ]; then

  echo "CRITICAL: Memory usage is above critical threshold ($CRITICAL_THRESHOLD%). $used$UNIT used ($usage_percentage% of total)."

  exit 2

elif [ "$usage_percentage" -ge "$WARNING_THRESHOLD" ]; then

  echo "WARNING: Memory usage is above warning threshold ($WARNING_THRESHOLD%). $used$UNIT used ($usage_percentage% of total)."

  exit 1

else

  echo "OK: Memory usage is within bounds. $used$UNIT used ($usage_percentage% of total)."

  exit 0

fi


Ключевые особенности

  • Пороговые предупреждения: Определите пользовательские предупреждающие и критические уровни для использования памяти в процентах от общего объема памяти.
  • Гибкие единицы измерения: Отображайте использование памяти в единицах, которые наилучшим образом соответствуют вашим потребностям в мониторинге.
  • Интеграция с Nagios: Разработан для совместной работы с Nagios, что позволяет легко интегрировать его в существующие системы мониторинга.

Руководство по реализации

  • Загрузите скрипт: Клонируйте или загрузите скрипт из репозитория GitHub.
  • Права: Убедитесь, что скрипт является исполняемым, запустив его:

chmod +x check_memory.sh

  • Конфигурация Nagios: Интегрируйте сценарий в среду мониторинга Nagios. Определите команду в конфигурации Nagios, указывающую на сценарий, и настройте проверку служб на узлах для использования этой команды.
  • Конфигурация NRPE: Для мониторинга памяти на удаленных узлах Linux можно использовать этот скрипт с клиентом NRPE. Тогда сервер Nagios сможет выполнять скрипт удаленно.
  • Тестирование: Протестируйте скрипт вручную, чтобы убедиться, что он запускает оповещения так, как ожидается. При необходимости настройте пороговые значения и единицы измерения для точной настройки мониторинга.

Интеграция с Nagios

Чтобы интегрировать скрипт с сервером Nagios для мониторинга памяти локального экземпляра.

Вы можете определить новую команду в конфигурации Nagios:

define command{

    command_name check_memory_usage

    command_line /path/to/check_memory.sh -w $ARG1$ -c $ARG2$ -u $ARG3$

}

Затем используйте эту команду в определениях служб для мониторинга использования памяти на хосте Nagios.

Замените /path/to/ на фактический путь к скрипту.

Следующий шаг поможет вам отслеживать память удаленных узлов с помощью клиента NRPE.

Nagios SNMP-мониторинг хостов Linux на AlienVault USM / OSSIM

Интеграция с клиентом NRPE

Чтобы интегрировать скрипт мониторинга памяти с Nagios через NRPE (Nagios Remote Plugin Executor), вам нужно добавить определение команды в файл nrpe.cfg на удаленном хосте, где запущен NRPE. Это определение будет указывать NRPE, как выполнять скрипт по запросу сервера Nagios.

Конфигурация клиента NRPE: Добавьте приведенную ниже запись в файл nrpe.cfg, чтобы включить скрипт мониторинга памяти:

command[check_memory]=/usr/lib/nagios/plugins/check_memory.sh -w 80 -c 90 -u M


Настройте сервер Nagios: На сервере Nagios определите службу, которая использует команду check_nrpe для запроса выполнения check_memory на удаленном хосте.

Пример определения службы может выглядеть следующим образом:



define service{

    use generic-service

    host_name remote_host_name

    service_description Memory Usage

    check_command check_nrpe!check_memory

}


Замените remote_host_name на имя хоста, определенное в конфигурации Nagios.

Заключение

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

Используя этот скрипт Bash, системные администраторы могут проактивно управлять ресурсами памяти, гарантируя, что серверы останутся здоровыми и отзывчивыми.

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

⛅ Мониторинг хостов Linux с помощью плагина Nagios check_by_ssh

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

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

см. также:



2024-02-21T12:55:07
Скрипты

🔒 Скрытие пользовательского ввода в скриптах bash

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

Мы рассмотрим два решения.

Одно работает с любой оболочкой Bash или Bash-подобной оболочкой, а другое соответствует POSIX, если вам нужна максимальная совместимость.

Скрипт ниже включает в себя оба решения.

Это пример, который вы можете запустить, но в нем есть только 1-3 строки кода в середине, которые сосредоточены на скрытии пользовательского ввода.

Вы можете раскомментировать вариант 1 или 2 в зависимости от вашего случая использования.

#!/usr/bin/env bash



set -o errexit

set -o nounset



while true; do

  printf "Please input your API key and hit enter: "



  # ВАРИАНТ 1: ТРЕБУЕТСЯ ОБОЛОЧКА BASH ИЛИ BASH-ПОДОБНАЯ ОБОЛОЧКА (BASH, ZSH, ASH И Т. Д.)

  read -sr key



  # ВАРИАНТ 2: ДЛЯ МАКСИМАЛЬНОЙ СОВМЕСТИМОСТИ С ОБОЛОЧКАМИ (SH, DASH И Т. Д.)

  # stty -echo

  # read -r key

  # stty echo



  if [ -z "${key}" ]; then

    printf "nnPlease input your API key or hit CTRL+c to halt this scriptnn"

  else

    # TODO: Вставьте свою пользовательскую логику, которая использует этот ключ.

    printf "nnFor demo purposes, your API key is: %sn" "${key}"

    break

  fi

done


Основное отличие заключается в том, что флаг -s из read недоступен в sh и других минимальных оболочках.

Флаг -s не позволяет передавать ввод пользователя через echo.

Чтобы обойти это ограничение, мы можем использовать stty, чтобы отключить эхо, возвращающее наш чувствительный текст, записать этот ввод в переменную, а затем снова включить echo.

🐧 Как установить и перечислить переменные среды в Linux

Технически вы можете пропустить последний stty echo, и наш вывод будет показан, но мы заметили, что при использовании sh или bash ваш интерпретатор перестает выдавать эхо после выхода из этого скрипта.

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

 



2024-02-13T14:32:56
Скрипты

🐍 Программа на Python для загрузки JSON-данных из файла

В программировании JSON (JavaScript Object Notation) – это популярный способ обмена данными.

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

Python, известный своим обширным набором инструментов и простым языком, отлично работает с JSON.

Это руководство покажет вам, как легко работать с данными JSON в Python, помогая вам управлять данными более гладко и эффективно.

Читать

🐧 Запрет пользователям запускать `chmod 777`

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

Ниже приведен базовый пример того, как можно создать такой скрипт в Ubuntu или любой другой системе на базе Linux.

🐧 Как найти все файлы с правами 777 на Linux

  1. Создайте скрипт: Вы создадите скрипт с именем safe_chmod и поместите его в каталог /usr/local/bin, который обычно находится в $PATH пользователя.
  2. Содержание скрипта:

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

    Во всех остальных случаях он выполнит обычную команду chmod.
  3. Сделайте сценарий исполняемым: После создания скрипта вам нужно будет сделать его исполняемым.
  4. Создайте алиас: Создайте алиас safe_chmod для chmod в скриптах входа/не входа в систему

🐧 Опасные последствия команды chmod 777

Создание скрипта

Откройте терминал и с помощью текстового редактора создайте скрипт.

Например, с помощью nano:

sudo nano /usr/local/bin/safe_chmod

Добавьте в файл следующее содержимое:

#!/bin/bash

# Custom script wrapper for chmod to prevent setting 777 permissions



# Check if any of the arguments is '777'

for arg in "$@"; do

    if [ "$arg" == "777" ]; then

        echo "Error: Setting 777 permissions is not allowed for security reasons."

        exit 1

    fi

done



# If 777 is not found, execute the original chmod command with all arguments

/bin/chmod "$@"

Сделайте скрипт исполняемым

Сохраните и закройте файл.

Затем сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/safe_chmod

Алиас команды chmod

Чтобы скрипт эффективно заменил команду chmod, вы можете присвоить команде chmod значение safe_chmod.

Это можно сделать, отредактировав файлы `.bashrc` или `.bash_profile` для каждого пользователя или глобально в `/etc/bash.bashrc`:

echo "alias chmod='/usr/local/bin/safe_chmod'" >> ~/.bashrc  $ source ~/.bashrc

Заключение и соображения

Этот метод скрипта – простой и эффективный способ предотвратить использование chmod 777, повышающий безопасность ваших Linux-систем.

Однако важно отметить, что этот метод не является надежным.

Пользователи с достаточными правами могут обойти это ограничение, и он не предотвращает прямое обращение к /bin/chmod, если не используется алиас..

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

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

см. также:



2024-01-23T10:08:30
Скрипты