Я хотел бы использовать GnuPG для расшифровки коротких сообщений, которые хранятся на удаленном хосте (под управлением Linux), то есть:
ssh [<user>@]<host>
gpg -d <file-to-decrypt>
но более автоматизированным способом. Я просто хочу ввести одну команду, а сценарий должен сделать все остальное (за исключением (интерактивного) ввода пароля), то есть:
remote-gpg [<user>@]<host> <file-to-decrypt>
Моя главная задача - объединить шаги «ssh» и «gpg».
Я ищу простой и эффективный способ добиться этого:
ssh
+ основные утилиты)gpg-agent
работает на сервереИтак, такие решения, как написание 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.