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

📜 Скрипты Bash для сканирования и мониторинга сети

В этой статье представлены несколько простых скриптов сканирования и мониторинга сети с использованием комбинации команд bash и ping.

Очевидно, что эти скрипты не подходят в сравнении со специализированным программным обеспечением для полного мониторинга, такого как например nagios: Читать

🐧 Как заблокировать и разблокировать несколько пользователей Linux

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

В этом руководстве мы объясним, как заблокировать и разблокировать несколько учетных записей пользователей одновременно в Linux с помощью shell скрипта.

Что такое команда passwd?

Команда passwd – одна из наиболее часто используемых администратором Linux команд для обновления токенов аутентификации пользователей в файле /etc/shadow путем вызова Linux-PAM и Libuser API.

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

Мы создадим следующие три скрипта bash для одновременной блокировки и разблокировки нескольких учетных записей.

  • Cкрипт для блокировки пользователей
  • Cкрипт для проверки статуса заблокированных или разблокированных пользователей
  • Cкрипт для разблокировки пользователей

Составьте список пользователей, которых нужно заблокировать или разблокировать.

Каждый пользователь должен быть в отдельной строке.

🐧 Операторы Bash if: if, elif, else, then, fi

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

Другими словами, условные операторы определяют «если условие истинно или ложно, то сделать то или это, а если верно противоположное, сделать что-нибудь еще».

Это самая основная функция любого условного оператора.

Эта статья познакомит вас с пятью основными предложениями оператора if , а именно if, elif, else, then и fi. Читать

🐧 Функция Bash для извлечения файловых архивов различных типов

Существует много приложений для извлечения различных типов архивных файлов.

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

Сегодня я наткнулся на простую функцию Bash для извлечения файловых архивов различных типов в Linux.

Эта функция Bash может извлекать наиболее часто используемые форматы архивов, такие как .tar.bz2, .tar.bz, .bz2, .rar, .zip и .7z.

Вам не нужно использовать фактическое приложение для архивирования, распаковки архива!

Просто добавьте эту функцию в свой файл ~/bashrc и вызовите ее для извлечения файлов архива.

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

Не нужно запоминать флаги и опции.

Функция Bash для извлечения файловых архивов различных типов

Откройте ваш файл ~/.bashrc:

$ nano ~/.bashrc

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

# Bash Function To Extract File Archives Of Various Types

extract () {

     if [ -f $1 ] ; then

         case $1 in

             *.tar.bz2)   tar xjf $1     ;;

             *.tar.gz)    tar xzf $1     ;;

             *.bz2)       bunzip2 $1     ;;

             *.rar)       rar x $1       ;;

             *.gz)        gunzip $1      ;;

             *.tar)       tar xf $1      ;;

             *.tbz2)      tar xjf $1     ;;

             *.tgz)       tar xzf $1     ;;

             *.zip)       unzip $1       ;;

             *.Z)         uncompress $1  ;;

             *.7z)        7z x $1    ;;

             *)           echo "'$1' cannot be extracted via extract()" ;;

         esac

     else

         echo "'$1' is not a valid file"

     fi

}

Нажмите Ctrl + o и нажмите ENTER, чтобы сохранить файл, а затем нажмите Ctrl + x, чтобы выйти из файла.

Выполните следующую команду, чтобы изменения вступили в силу:

$ source ~/.bashrc

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

Например, я собираюсь извлечь файл архива .7z с помощью команды:

$ extract archive.7z 

Пример вывода:

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21

p7zip Version 16.02 (locale=en_IN,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz (206A7),ASM)



Scanning the drive for archives:

1 file, 16013693 bytes (16 MiB)



Extracting archive: archive.7z

--

Path = archive.7z

Type = 7z

Physical Size = 16013693

Headers Size = 1204

Method = LZMA:23

Solid = +

Blocks = 1



Everything is Ok                                                               



Folders: 21

Files: 37

Size:       16625007

Compressed: 16013693

Точно так же, чтобы извлечь файлы типа .zip, команда будет следующей:

$ extract archive.zip 

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

Если в вашей системе не установлены поддерживаемые инструменты архивирования, вы получите сообщение об ошибке, подобное приведенной ниже:

$ extract archive.zip 

bash: /usr/bin/unzip: No such file or directory

Этот скрит упоминается во многих местах в Интернете.

Автор – Игорь Павлов.

Вы используете какие-нибудь другие классные функции Bash?

Пожалуйста, поделитесь ими через раздел комментариев.

Это может быть полезно мне и всем читателям.

Спонсор статьи – обзор Logitech MX Keys



2020-11-02T19:33:48
Скрипты

🔐 Настройка входа по SSH без пароля для нескольких удаленных серверов с помощью скрипта

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

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

В этой статье мы продемонстрируем, как создать пару ключей SSH и скопировать открытый ключ на несколько удаленных хостов Linux одновременно с помощью скрипта шелла.

Создайте новый ключ SSH на Linux

Сначала сгенерируйте пару ключей SSH (закрытый ключ / ключ идентификации, который SSH-клиент использует для аутентификации при входе на удаленный SSH-сервер, и открытый ключ, хранящийся в качестве авторизованного ключа в удаленной системе, на которой запущен SSH-сервер), используя ssh- keygen следующим образом:

# ssh-keygen




Создание скрипта bash для нескольких удаленных входов

Затем создайте скрипт, который поможет скопировать открытый ключ на несколько удаленных хостов Linux.

# vim ~/.bin/ssh-copy.sh

Скопируйте и вставьте следующий код в файл (замените следующие переменные соответственно USER_NAME – имя пользователя для подключения, HOST_FILE – файл, содержащий список имен хостов или IP-адресов, и ERROR_FILE – файл для хранения любых ошибок команды ssh).

#!/bin/bash

USER_NAME="root"

HOST_FILE="/root/hosts"

ERROR_FILE="/tmp/ssh-copy_error.txt"

PUBLIC_KEY_FILE="$1"



if [ ! -f  $PUBLIC_KEY_FILE ]; then

        echo "File '$PUBLIC_KEY_FILE' не найден!"

        exit 1

fi



if [ ! -f $HOST_FILE ]; then

        echo "File '$HOST_FILE' не найден!"

        exit 2

fi



for IP in `cat $HOST_FILE`; do

        ssh-copy-id -i $PUBLIC_KEY_FILE $USER_NAME@$IP 2>$ERROR_FILE

        RESULT=$?

        if [ $RESULT -eq 0 ]; then

                echo ""

                echo "Открытый ключ успешно скопирован на $IP"

                echo ""

        else

                echo "$(cat  $ERROR_FILE)"

                echo 

                exit 3

        fi

        echo ""

done

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

Затем сделайте скрипт исполняемым с помощью команды chmod, как показано далее:

# chmod +x ssh-copy.sh

Теперь запустите скрипт ssh-copy.sh и укажите свой файл открытого ключа в качестве первого аргумента, как показано ниже:

# ./ssh-copy.sh /root/.ssh/prod-rsa.pub

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

После запуска ssh-agent добавьте к нему свой закрытый ключ следующим образом:

# eval "$(ssh-agent -s)"

# ssh-add  ~/.ssh/prod_rsa

Вход на удаленный сервер Linux без пароля

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

Таким образом, вы можете автоматизировать межсерверные процессы.

# ssh root@10.2.32.12

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

 





2020-10-05T11:36:32
Скрипты

🐧 Как очистить историю bash при выходе из системы

Как автоматически очищать историю GNU Bourne-Again SHell при выходе из оболочки shell?

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

$ echo "unset HISTFILE" | sudo tee /etc/profile.d/unset_histfile.sh

При необходимости установите для переменной оболочки HISTSIZE значение 0 при входе в систему, чтобы выполненные команды не сохранялись в списке истории.

Внимание, это очень неудобно, так как полностью отключит историю в оболочке входа в систему.

$ echo "HISTSIZE=0" | sudo tee /etc/profile.d/disable_histsize.sh

Создайте /etc/bash.bash_logout файл, который будет выполняться при выходе из шелла.

Используйте его для очистки  истории.

Не волнуйтесь, он будет выполнен после отдельного файла очистки оболочки входа ~/.bash_logout.

$ echo "history -c" | sudo tee /etc/bash.bash_logout

Обратите внимание, он не будет записывать пустой список истории в файл истории.

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

Это также означает, что список истории не будет инициализирован из файла истории при запуске.

Удалите существующий файл истории ~ /.bash_history, чтобы все было в порядке.

Но помните о других пользователях.

Вы всегда можете сохранить список истории в специальный файл.

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

$ HISTFILE=session_history.txt history -w


$ cat session_history.txt

cat .bash_history

HISTFILE=session_history.txt history -w




2020-08-30T14:26:11
Скрипты