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

Как автоматизировать расшифровку файлов GPG по SSH?

Я хотел бы использовать GnuPG для расшифровки коротких сообщений, которые хранятся на удаленном хосте (под управлением Linux), то есть:

  1. ssh [<user>@]<host>
  2. gpg -d <file-to-decrypt>
  3. взаимодействовать с gpg-agent и / или просто ввести пароль
  4. закрыть SSH соединение

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

  1. remote-gpg [<user>@]<host> <file-to-decrypt>
  2. [запрос пароля без повторения его в виде открытого текста]
  3. [выгрузите расшифрованный текст на стандартный вывод] И закройте соединение SSH

Моя главная задача - объединить шаги «ssh» и «gpg».

Я ищу простой и эффективный способ добиться этого:

Итак, такие решения, как написание GNU expect скрипт не может быть и речи.

Мотивация: Типичный вариант использования - использование телефона (под управлением Android) для получения зашифрованного сообщения (например, пароля) с удаленного сервера. Закрытие соединения при доставке информации желательно, потому что вы можете забыть выйти из системы до того, как ваш телефон будет потерян / украден, а вор не может получить дополнительную информацию, не угадав пароль (поскольку пароль запрашивается каждый раз). Наконец, удаление SSH-ключа вашего телефона из файла authorized_keys на сервере - это все, что нужно для предотвращения нарушения безопасности.

Кстати, возникнут ли при таком подходе дополнительные риски безопасности (по сравнению с четырехэтапным ручным процессом)?

ssh -t user@host gpg -d file

Я не думаю, что это должно быть сложнее.

Расшифрованный вывод будет возвращен на ваш терминал. В -t опция просит ssh запросить tty, который необходим, чтобы gpg мог запросить пароль на вашем терминале.

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

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

decrypt.sh:

#!/bin/bash
# Get our original tty and turn off -echo
stty_orig=`stty -g` stty -echo 
read Pass
# type in your pass for gpg.
gpg --passphrase="$Pass" --no-tty -d $1
# Output goes to STDOUT
stty $stty_orig

Назовите это:

ssh -t user@host 'decyrpt.sh File'

Предположения: ваш файл находится в домашнем каталоге, а decrypt.sh находится в вашем $ PATH.