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

🖧 Как проверить IPv4-адреса в скрипте

Проверка IP-адресов – распространенная задача в сетевом и системном администрировании.

В этом уроке мы узнаем, как проверить IPv4-адреса с помощью скрипта оболочки.

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

IPv4 против IPv6: В чем разница между IPv4 и IPv6

Понимание формата адресов IPv4

IPv4-адрес состоит из четырех октетов, каждый из которых имеет значение от 0 до 255 и разделен точками.

Например, 192.168.1.1 – это правильный IPv4-адрес.

Bash-скрипт для проверки адреса IPv4

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

Мы будем использовать функцию для проверки IPv4-адреса.

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

#!/bin/bash

# Filename: validate_ip.sh



validate_ip() {

    local ip=$1

    local stat=1



    if [[ $ip =~ ^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ ]]; then

        OIFS=$IFS

        IFS='.'

        ip=($ip)

        IFS=$OIFS

        [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]

        stat=$?

    fi



    return $stat

}



echo -n "Enter IPv4 address: "

read ip_address



if validate_ip $ip_address; then

    echo "${ip_address} is a valid IPv4 address."

else

    echo "${ip_address} is a invalid IPv4 address."

fi

Проверка скрипта

  • Сделайте скрипт исполняемым: chmod +x validate_ip.sh
  • Запустите скрипт: ./validate_ip.sh
  • Введите IPv4-адрес, когда появится запрос.

Заключение

С помощью этого простого скрипта вы можете легко проверять IPv4-адреса.

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

Не стесняйтесь модифицировать и расширять его в соответствии с вашими потребностями.

Например, вы можете захотеть обрабатывать несколько IP-адресов из файла или включить дополнительное протоколирование недействительных вводов.

см. также:



2023-12-25T12:21:55
Скрипты

🐍 Вычисление контрольных сумм с помощью Python и Hashlib

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

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

В Python есть удобный модуль hashlib, который позволяет вычислять различные алгоритмы контрольных сумм, такие как MD5, SHA1 и SHA256.

В этой статье мы расскажем вам о процессе вычисления контрольных сумм с помощью Python и модуля hashlib.

Шаг 1: Импортируйте необходимый модуль

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

import hashlib

Шаг 2: Определение функции

Далее мы определяем функцию compute_checksums, которая принимает в качестве параметра file_path.

Эта функция будет вычислять контрольные суммы MD5, SHA1 и SHA256 для заданного файла.

def compute_checksums(file_path):

    hash_md5 = hashlib.md5()

    hash_sha1 = hashlib.sha1()

    hash_sha256 = hashlib.sha256()

Шаг 3: Открываем файл

Теперь мы открываем файл, указанный в file_path, с помощью оператора with, чтобы обеспечить правильную обработку и закрытие файла.

with open(file_path, "rb") as f:

Шаг 4. Чтение и обновление контрольных сумм

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

Такой подход эффективен для работы с большими файлами.

for chunk in iter(lambda: f.read(4096), b""):

            hash_md5.update(chunk)

            hash_sha1.update(chunk)

            hash_sha256.update(chunk)

Шаг 5: Возврат контрольных сумм

После обработки всего файла мы возвращаем вычисленные контрольные суммы в виде словаря, содержащего значения MD5, SHA1 и SHA256.

return {"md5": hash_md5.hexdigest(), "sha1": hash_sha1.hexdigest(), "sha256": hash_sha256.hexdigest()}

Полный код: Здесь представлен полный код, который вы можете скопировать и использовать в своей работе:

import hashlib



def compute_checksums(file_path):

    hash_md5 = hashlib.md5()

    hash_sha1 = hashlib.sha1()

    hash_sha256 = hashlib.sha256()



    with open(file_path, "rb") as f:

        for chunk in iter(lambda: f.read(4096), b""):

            hash_md5.update(chunk)

            hash_sha1.update(chunk)

            hash_sha256.update(chunk)



    return {"md5": hash_md5.hexdigest(), "sha1": hash_sha1.hexdigest(), "sha256": hash_sha256.hexdigest()}

Используя этот код, вы сможете вычислить контрольные суммы MD5, SHA1 и SHA256 для любого указанного вами файла.

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

см. также:

 



2023-12-20T10:50:47
Скрипты

Для чего выполняется проверка AML?

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

Предотвращение финансовых преступлений

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

  • отмывание денег,
  • финансирование терроризма,
  • другие незаконные действия.

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

Соблюдение нормативных стандартов

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

Защита репутации

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

Избежание юридических последствий

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



2023-12-19T14:15:22
Скрипты

👥 Как создать быстрый кравлер веб-сайтов на PowerShell

Сегодня мы поговорим об очень интересной вещи – о том, как создать быстрый веб-кравлер с помощью PowerShell.

Возможно, вы зададитесь вопросом: “Что такое краулер веб-сайта?” и “Зачем использовать PowerShell для этого?”.

Мы ответим на эти вопросы и покажем вам весь процесс шаг за шагом.

Представьте, что у вас есть робот, который может посещать веб-сайты, как и вы.

Но этот робот очень быстрый и может посетить много-много сайтов за очень короткое время.

Это и есть краулер – он похож на паука, который “ползает” по Интернету, собирая информацию с разных сайтов.

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

Зачем использовать PowerShell?

PowerShell – это инструмент, который можно использовать на компьютерах под управлением Windows.

Это очень мощный инструмент для автоматизации задач.

Почему стоит использовать его для краулера?

Потому что он быстрый, встроен в большинство систем Windows и отлично подходит для работы с веб-данными.

Кроме того, если вы уже немного знакомы с PowerShell, это будет интересный способ применить свои навыки!

Создание кравлера сайта

Важные замечания:

  • Помните, что к просмотру веб-сайтов следует подходить ответственно. Всегда проверяйте файл robots.txt сайта, чтобы узнать, разрешено ли на нем действие.
  • Если вы собираете много данных, вам может понадобиться их где-то хранить. Подумайте, как вы будете это делать.

Шаг 1: Настройка среды

Сначала откройте PowerShell на своем компьютере.

Вы можете найти его, задав поиск “PowerShell” в строке поиска Windows.

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

Проверить это можно, выполнив команду Get-ExecutionPolicy.

Если в ней не указано ‘RemoteSigned’ или ‘Unrestricted’, выполните команду Set-ExecutionPolicy RemoteSigned.

Шаг 2: Напишите свой первый скрипт

Мы начнем с базового скрипта.

Введите следующее в PowerShell:

$url = 'https://example.com'

$webpage = Invoke-WebRequest -Uri $url

$webpage.Links

Этот скрипт задает адрес веб-сайта в переменную $url.

Затем он получает веб-страницу и отображает все ссылки на ней.

Шаг 3: Расширьте свой кравлер

Чтобы заставить кравлер посещать больше страниц, вам нужно добавить цикл.

Это означает, что скрипт будет постоянно проходить по списку сайтов.

Будьте осторожны – не пытайтесь посетить слишком много сайтов слишком быстро.

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

Шаг 4: Сохраните и запустите скрипт

После написания скрипта сохраните его с расширением .ps1, например mycrawler.ps1.

Запустите его, набрав .mycrawler.ps1 в PowerShell.

Шаг 5: Тестируйте и улучшайте

Запустив скрипт, посмотрите, что он делает.

Правильно ли он показывает ссылки?

Подумайте, что еще вы хотите, чтобы делал ваш краулер

Может быть, вы хотите, чтобы он находил конкретную информацию на каждом сайте?

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

Заключение

Вы только что изучили основы создания быстрого краулера веб-сайтов в PowerShell.

С этими навыками вы можете начать исследовать огромный мир веб-данных.

Помните, что практика делает совершенным, поэтому продолжайте экспериментировать со своими скриптами и посмотрите, какие удивительные вещи вы сможете открыть!

см. также:

 



2023-12-14T14:33:41
Скрипты

🐧 Как следить за каталогом на предмет создания новых файлов в Linux

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

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

Вот базовая схема того, как это можно настроить:

Шаг 1: Установите inotify-tools

Сначала вам нужно установить inotify-tools.

Обычно вы можете установить его с помощью менеджера пакетов.

Например, в системах на базе Ubuntu или Debian вы можете установить его, выполнив команду:

sudo apt update
sudo apt install inotify-tools

Ранее уже рассматривали его:

🐧 Как отслеживать события файловой системы в файлах и каталогах на Linux

Шаг 2: Создание скрипта

Далее создайте bash скрипт, который использует inotifywait (часть inotify-tools) для мониторинга каталога на предмет новых файлов и затем вызывает API при обнаружении нового файла.

Ниже приведен простой пример того, как может выглядеть этот скрипт:

#!/bin/bash



# Папка для мониторинг

MONITOR_DIR="/path/to/your/directory"



# Ваша команда

# CUSTOM_COMMAND="curl -X POST -d @newfile http://your.api.endpoint"



# Отслеживаем новые файлы и вызываем API

inotifywait -m -e create --format '%w%f' "$MONITOR_DIR" | while read NEWFILE

do

    echo "Новый файл: $NEWFILE"

    #Снимите комментарий, чтобы выполнять пользовательские команды и вызывать API

    #eval $CUSTOM_COMMAND

done

В этом скрипте замените /path/to/your/directory на путь к папке, которую вы хотите контролировать, а http://your.api.endpoint – на конечную точку API, которую вы хотите вызвать.

Вы также можете изменить CALL_API_COMMAND, чтобы включить в нее все необходимые заголовки, данные или опции для вашего конкретного вызова API.

Шаг 3: Запустите скрипт

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

Это можно сделать следующим образом:

  • Сохранить скрипт в файл, например monitor.sh.
  • Сделать его исполняемым: chmod +x monitor.sh
  • Запустить скрипт : ./monitor.sh

Шаг 4: Запуск скрипта в фоновом режиме

Если вы хотите, чтобы этот скрипт постоянно выполнялся в фоновом режиме, вы можете использовать nohup или запустить его в сеансе screen или tmux.

Например:

nohup ./monitor.sh &

Это позволит сохранить скрипт запущенным, даже если вы выйдете из сеанса.

Шаг 5: Запуск скрипт в качестве службы Systemd

Чтобы запустить скрипт в качестве службы systemd в системе Linux, выполните следующие действия:

Убедитесь, что ваш скрипт написан правильно и протестирован.

Поместите его в подходящий каталог, например /usr/local/bin/.

Для этого примера предположим, что ваш скрипт будет называться monitor.sh.

sudo mv monitor.sh /usr/local/bin/

Убедитесь, что он является исполняемым:

sudo chmod +x /usr/local/bin/monitor.sh

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

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

sudo nano /etc/systemd/system/monitor.service

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



[Unit]

Description=File Monitor Service



[Service]

ExecStart=/usr/local/bin/monitor.sh

Restart=always

User=nobody

Group=nogroup



[Install]

WantedBy=multi-user.target

  • Description: Краткое описание вашей службы.
  • ExecStart: Полный путь к вашему сценарию.
  • Restart (Перезапуск): Настраивает, должна ли служба перезапускаться после выхода. всегда означает, что служба будет перезапускаться независимо от кода выхода.
  • User and Group: Пользователь и группа, под которыми будет запущена служба. Возможно, вы захотите создать определенного пользователя в целях безопасности.

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

Перезагрузите конфигурацию менеджера systemd:

sudo systemctl daemon-reload

Включите службу, чтобы она запускалась при загрузке:

sudo systemctl enable monitor.service

Запуск службы:

sudo systemctl start monitor.service

Проверьте статус вашей службы, чтобы убедиться, что она работает должным образом:

sudo systemctl status monitor.service

Дополнительные примечания:

  • Данный скрипт является базовым примером. В зависимости от конкретных требований вам может потребоваться его модификация.
  • Если вам нужен более сложный мониторинг или обработка, рассмотрите возможность использования более надежного решения или языка программирования.
  • Убедитесь, что ваш скрипт является самодостаточным и не требует интерактивного ввода. Службы Systemd не предназначены для интерактивного использования.
  • Если ваш скрипт пишет логи, убедитесь, что он пишет в место, к которому у него есть разрешение на доступ. В качестве альтернативы вы можете управлять записью логов с помощью возможностей ведения логов в Systemd.

см. также:



2023-12-13T09:51:42
Скрипты

🔐 Разница между PGP и GPG

1. Введение

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

Даже в этом случае часто существует уровень безопасности, хотя и внешний, помимо базовой реализации.

Фактически, основой электронных подписей и идентификации также является шифрование.

🔐 Каковы различные форматы сертификатов?

В этом руководстве мы рассмотрим стандарт OpenPGP (Open Pretty Good Privacy) как один из наиболее универсальных способов шифрования и GNU Privacy Guard (GnuPG, GPG) как одну из его основных реализаций.

Сначала мы рассмотрим стандарт OpenPGP.

После этого мы переходим к рассмотрению GPG.

Вначале мы рассмотрим ее основные возможности.

Далее мы рассмотрим несколько шагов по созданию ключей и шифрованию данных.

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

Он должен работать в большинстве POSIX-совместимых сред, если не указано иное.

2. Конфиденциальность с помощью OpenPGP

Стандарт OpenPGP является потомком и частичным преемником стандарта и инструментария PGP.

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

В настоящее время она принадлежит компании Symantec, которая, в свою очередь, является частью Broadcom.

Однако в настоящее время OpenPGP является международным стандартом, как это определено в последнем документе RFC 4880 – OpenPGP Message Format. Таким образом, все желающие могут использовать его, внедряя концепции и определения в свои разработки:

  • гибридная система симметричного и асимметричного шифрования
  • данные шифруются симметрично с помощью сеансового ключа
  • сеансовые ключи шифруются асимметрично.

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

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

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

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

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

В качестве примера рассмотрим одну из наиболее известных реализаций OpenPGP.

3. GNU Privacy Guard (GnuPG)

GnuPG (GNU Privacy Guard), чаще просто GPG, – это инструментарий, полностью реализующий и расширяющий стандарт OpenPGP.

В дополнение к стандартному и дополнительному набору функций OpenPGP, GPG предоставляет ряд усовершенствований:

  • универсальная система управления ключами
  • доступ ко многим каталогам открытых ключей
  • внешние приложения и библиотеки
  • поддержка расширений Secure/Multipurpose Internet Mail Extensions (S/MIME)
  • поддержка SSH
  • полностью перенесен на платформу Microsoft Windows под именем Gpg4win
  • поддержка хэша SHA-512 и алгоритмов сжатия ZLIB и BZIP2.

Разумеется, эти возможности зависят от версии GPG:

Основным инструментом GnuPG является gpg.

Он реализует и предоставляет все функции OpenPGP и не только.

Итак, кратко рассмотрим шаги по шифрованию данных с помощью ключа.

3.1. Генерация пары ключей

Начнем с генерации идентификатора или пары ключей:

 

gpg --full-generate-key
gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(14) Existing key from card
Your selection?[/simtmerm]
Хотя для генерации ключей мы можем использовать более простую опцию -generate-key (-genkey), опция -full-generate-key (-full-gen-key) предоставляет все параметры конфигурации ключей:
тип
размер
срок действия
имя
адрес электронной почты
комментарий
пароль
Пройдя через мастер, мы можем настроить и защитить нашу новую идентификацию.
После этого у нас должна появиться новая пара закрытого и открытого ключей, а также так называемый сертификат отзыва.
В двух словах, сертификат отзыва используется для публичного объявления о том, что ключ больше не может считаться действительным.
3.2. Список ключей
Мы можем проверить текущие доступные ключи с помощью опции -list-public-keys (-list-keys, -k):
[simterm]$ gpg --list-public-keys
gpg: checking the trustdb
gpg: marginals needed: 0  completes needed: 0  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
/home/baeldung/.gnupg/pubring.kbx
------------------------
pub   rsa4096 2023-11-11 [SC]
10666006DEAD0A18B19BADBEEF006B0FC83BB041
uid           [ultimate] baeldung
sub   rsa4096 2023-11-11 [E][/simtmerm]
С другой стороны, закрытые или секретные ключи можно увидеть с помощью функции -list-secret-keys (-k):
[simterm]$ gpg --list-secret-keys
/home/baeldung/.gnupg/pubring.kbx
------------------------
sec   rsa4096 2023-11-11 [SC]
10666006DEAD0A18B19BADBEEF006B0FC83BB041
uid           [ultimate] baeldung
ssb   rsa4096 2023-11-11 [E]

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

Подключи связаны с основным ключом, но могут быть отозваны независимо от него.

3.3. Хранение ключей

В общем случае ключи хранятся в файле keyring, обычно по адресу $HOME/.gnupg.

🔐 Менеджеры паролей: Переход с LastPass на Bitwarden

Для экспорта ключей в отдельные файлы можно использовать только команду -export или добавить идентификаторы ключа или пользователя:

gpg --export [<KEYUSER1_ID> ... <KEYUSERn_ID>]

В то время как по умолчанию происходит экспорт в stdout, в опции -output (-o) можно указать файл, в который будет записана извлеченная информация.

После этого мы можем перенести этот файл на другую машину.

3.4. Шифрование файла или данных

После генерации ключей мы можем применить их к базовому потоку или файлу:

printf <DATA_TO_ENCRYPT< | gpg --encrypt
You did not specify a user ID. (you may use "-r")
Current recipients:
Enter the user ID.  End with an empty line:

Здесь мы передаем вывод printf в gpg для шифрования с помощью подкоманды -encrypt.

Точнее, входные данные поступают из stdin, а выходные – в stdout.

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

В качестве альтернативы мы можем включить это в команду с помощью опции -recipient (-r):

printf <DATA_TO_ENCRYPT< | gpg --encrypt --recipient <UID> --output <OUT_FILE_PATH>

Здесь мы также указали путь к файлу -output (-o).

Другим способом хранения данных является перенаправление вывода.

Наконец, мы также можем добавить путь к файлу для шифрования вместо использования труб:

gpg --encrypt --recipient <UID> <IN_FILE_PATH>

В результате мы получаем зашифрованный файл с расширением .gpg.

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

3.5. Защита паролем файла или данных

В качестве альтернативы мы можем вообще отказаться от получателя и ключей, шифруя только парольной фразой:

printf <DATA_TO_ENCRYPT< | gpg —symmetric

В этом случае мы снова шифруем stdin и выводим в stdout.

Также мы используем алгоритм по умолчанию.

Чтобы зашифровать файл и выбрать точный метод, мы указываем путь в командной строке вместе с опцией -cipheralgo с конкретным именем алгоритма, например aes256:

[sitmerm] $ gpg –symmetric –cipher-algo aes256 <IN_FILE_PATH> [/simterm]

Естественно, мы можем зашифровать и TAR-архив.

3.6. Расшифровка

Обратной операцией шифрования является дешифрование.

В gpg это делается с помощью подкоманды -decrypt (-d):

gpg --decrypt <IN_FILE_PATH>

Как и раньше, мы также можем использовать stdin:

printf <ENCRYPTED_DATA> | gpg --decrypt --output <OUT_FILE_PATH>

В этом случае мы также указываем выходной файл.

Важно отметить, что gpg автоматически определяет алгоритм шифрования, если он поддерживается.

3.7. gpg: проблема с агентом: Неправильный ioctl для устройства

Одной из распространенных ошибок при шифровании и дешифровании является gpg: problem with the agent: Inappropriate ioctl for device.

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

echo 'Data' | gpg --symmetric
gpg: problem with the agent: Inappropriate ioctl for device
gpg: error creating passphrase: Operation cancelled
gpg: symmetric encryption of '[stdin]' failed: Operation cancelled

Чтобы обойти эту проблему, достаточно указать, что входные данные поступают с TTY, экспортировав управляющую переменную GPG_TTY:

export GPG_TTY=$(tty)

В частности, мы устанавливаем его значение на текущий TTY, возвращаемый командой tty.

4. Заключение

В этой статье мы рассказали об OpenPGP и GnuPG, их общих чертах и различиях.

В заключение отметим, что OpenPGP – это открытый стандарт, а GPG – конкретная реализация, построенная на его основе.

 



2023-11-23T16:50:10
Скрипты